−25%

Windows รายปี ถึง 31 ต.ค. ดูแพ็กเกจ

EQVPS
เริ่มต้นใช้งาน

วิธีตั้งค่า reverse proxy ของ nginx พร้อม HTTPS

วางโดเมนที่สะอาดและ HTTPS อัตโนมัติไว้หน้าแอปใด ๆ ที่ฟังอยู่บนพอร์ตในเครื่อง สองทาง: nginx กับ Certbot หรือ Caddy สำหรับ TLS อัตโนมัติในบรรทัดเดียว ทีละขั้น พร้อมคอนฟิกที่คัดลอกไปใช้ได้เลย

แอปแบบ self-hosted ส่วนใหญ่ฟังอยู่บนพอร์ตในเครื่องอย่าง 127.0.0.1:3000 และพูด HTTP ธรรมดา reverse proxy จะยืนอยู่ข้างหน้าบนพอร์ต 80/443 ยุติ HTTPS ด้วยใบรับรองจริง และส่งต่อทราฟฟิกไปยังพอร์ตในเครื่องนั้น — ให้ https://app.yourdomain.com ที่สะอาดแก่คุณ และให้รันหลายแอปหลัง IP เดียวได้ นี่คือสองทางที่พบบ่อย

ข้อกำหนดเบื้องต้น

  • โดเมนที่มี เรคคอร์ด A ชี้ไปที่ IP ของเซิร์ฟเวอร์ (รอ DNS แพร่กระจาย)
  • พอร์ต 80 และ 443 เปิด — ดู วิธีตั้งค่าไฟร์วอลล์ UFW
  • แอปของคุณรันอยู่ในเครื่อง เช่น บน 127.0.0.1:3000

ตัวเลือก A — Caddy (HTTPS อัตโนมัติ หนึ่งบรรทัด)

sudo apt install -y caddy
echo 'app.yourdomain.com { reverse_proxy 127.0.0.1:3000 }' | sudo tee /etc/caddy/Caddyfile
sudo systemctl restart caddy

เท่านั้นแหละ — Caddy ขอใบรับรอง Let's Encrypt สำหรับโดเมนและต่ออายุอัตโนมัติ

ตัวเลือก B — nginx + Certbot

sudo apt install -y nginx certbot python3-certbot-nginx

สร้าง /etc/nginx/sites-available/app:

server {
    listen 80;
    server_name app.yourdomain.com;
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

เปิดใช้งานและเพิ่ม HTTPS:

sudo ln -s /etc/nginx/sites-available/app /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d app.yourdomain.com

Certbot จะแก้ไขคอนฟิกให้บริการ HTTPS และตั้งค่าการต่ออายุอัตโนมัติ

คำเตือนตามตรง

  • DNS และพอร์ตคือความล้มเหลวที่พบบ่อย เรคคอร์ด A ต้องชี้มาที่นี่และแพร่กระจายแล้ว และ 80/443 ต้องเข้าถึงได้ มิฉะนั้นการออกใบรับรองจะล้มเหลว เครื่องมือทั้งสองจะลองใหม่ทันทีที่แก้ไขแล้ว
  • เปิดเผยเฉพาะสิ่งที่ตั้งใจ ให้แอปผูกกับ 127.0.0.1 เพื่อให้เข้าถึงได้ผ่าน proxy เท่านั้น ไม่ใช่โดยตรง
  • HTTPS ต้องมีโดเมน ไม่ใช่ IP เปล่า ๆ — Let's Encrypt ออกให้ชื่อ

ขั้นตอนถัดไป

reverse proxy คือสิ่งที่ทำให้เซิร์ฟเวอร์เดียวให้บริการได้หลายอย่าง — ดู การ self-host หลายบริการหลัง IP เดียว รันแอปในคอนเทนเนอร์อยู่ไหม? เริ่มที่ วิธีติดตั้ง Docker เพื่อให้แอปเองอยู่รอดผ่านการรีสตาร์ทและการล่ม ดู วิธีสร้างเซอร์วิส systemd

วิธีชี้โดเมนมาที่ VPS ของคุณ (A, AAAA และ www) →

คำถามที่พบบ่อย

reverse proxy คืออะไร และทำไมฉันถึงต้องใช้?

แอปของคุณมักฟังอยู่บนพอร์ตในเครื่องอย่าง 127.0.0.1:3000 reverse proxy จะยืนอยู่ข้างหน้าบนพอร์ต 80/443 ยุติ HTTPS และส่งต่อคำขอไปยังพอร์ตในเครื่องนั้น มันให้โดเมนที่สะอาด ใบรับรอง TLS ที่ถูกต้อง และความสามารถในการรันหลายแอปหลัง IP เดียว — โดยที่แอปเองไม่ต้องจัดการสิ่งเหล่านี้

nginx หรือ Caddy — ควรเลือกอันไหน?

Caddy เป็นทางที่เร็วที่สุด: มันขอและต่ออายุใบรับรอง Let's Encrypt โดยอัตโนมัติ และ HTTPS proxy ที่ใช้งานได้คือคอนฟิกบรรทัดเดียว nginx เป็นที่รู้จักกว่าและยืดหยุ่นกว่า แต่สำหรับ TLS คุณต้องเพิ่ม Certbot อยากได้ HTTPS โดยยุ่งยากน้อยที่สุดก็ใช้ Caddy; รู้จัก nginx อยู่แล้วหรือต้องการฟีเจอร์ของมันก็ใช้ nginx

ฉันต้องมีโดเมนไหม?

สำหรับใบรับรอง HTTPS ที่เชื่อถือได้ ต้องมี — Let's Encrypt ออกใบรับรองให้ชื่อโดเมน ไม่ใช่ IP เปล่า ๆ ชี้เรคคอร์ด A ไปที่ IP ของเซิร์ฟเวอร์ รอ DNS แพร่กระจาย จากนั้น proxy จะขอใบรับรองสำหรับชื่อนั้นได้

ต้องเปิดพอร์ตอะไรบ้าง?

80 และ 443 ขาเข้า พอร์ต 80 ใช้สำหรับการท้าทายใบรับรองครั้งแรกและการรีไดเรกต์ไป HTTPS; 443 ให้บริการทราฟฟิกที่เข้ารหัส เปิดทั้งสองในไฟร์วอลล์ของคุณ (ดูคู่มือ UFW) และตรวจสอบว่าไม่มีอย่างอื่นยึดครองอยู่ก่อนแล้ว

ทำไมการออกใบรับรองจึงล้มเหลว?

เกือบทุกครั้งคือ DNS หรือพอร์ต เรคคอร์ด A ของโดเมนต้องชี้มาที่เซิร์ฟเวอร์นี้และแพร่กระจายแล้ว และพอร์ต 80/443 ต้องเข้าถึงได้ (เปิดในไฟร์วอลล์ ไม่ถูกบล็อกที่ต้นทาง) แก้สองอย่างนี้แล้วการออกจะสำเร็จ; ทั้ง Caddy และ Certbot ต่างก็ลองใหม่

ความคิดเห็น

ยังไม่มีความคิดเห็น เป็นคนแรกสิ

แสดงความคิดเห็น

ความคิดเห็นจะถูกตรวจสอบก่อนแสดง