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 — 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 และตั้งค่าการต่ออายุอัตโนมัติ

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

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

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

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

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 ต่างก็ลองใหม่

ความคิดเห็น

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

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

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