大多數自託管應用監聽像 127.0.0.1:3000 這樣的本機埠,講的是明文 HTTP。反向代理站在前面的 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,這樣它只能透過代理存取,而不能直連。 - HTTPS 需要網域,而非裸 IP——Let's Encrypt 為名稱簽發。
下一步
反向代理正是讓一台機器提供許多服務的關鍵——見在一個 IP 後面自託管多個服務。把應用跑在容器裡?先看如何安裝 Docker。要讓應用本身在重新啟動和崩潰後依然存活,見如何建立 systemd 服務。
評論
目前還沒有評論。歡迎成為第一位。