Skip to content

建立 2026-09-15 更新 2026-09-15

反向代理設定

反向代理(reverse proxy)是指客戶端其實是在跟 Nginx 溝通,Nginx 再代替客戶端把請求轉發給後端的應用程式,並把回應傳回去。這與一般認知的「正向代理」(forward proxy,代替客戶端去存取外部網站)方向相反。現代網站架構中,Nginx 幾乎都是被放在應用程式(Node.js、Python、Java 等)前面,扮演這個角色。

proxy_pass 基本設定

假設後端應用程式跑在本機的 3000 埠:

server {
    listen 80;
    server_name app.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
    }
}

這樣所有進到 app.example.com 的請求,都會被轉發到後端的 Node.js(或其他)應用程式處理,客戶端完全不會直接接觸到後端伺服器。

常用的 proxy header 設定

預設情況下,後端應用程式收到的請求,來源 IP 會顯示成 Nginx 自己的位址,而不是真正的客戶端 IP。因此反向代理幾乎都要補上以下標頭,讓後端知道請求的原始資訊:

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;
}
標頭 用途
Host 保留原始請求的網域名稱,避免後端應用程式收到 Nginx 的內部位址
X-Real-IP 告訴後端真正發出請求的客戶端 IP
X-Forwarded-For 記錄請求經過的代理鏈,常用於日誌與流量分析
X-Forwarded-Proto 告知後端原始請求是 http 還是 https,避免應用程式判斷錯誤而導致重導向迴圈

逾時與緩衝設定

當後端回應較慢,或需要處理大檔案上傳/下載時,預設的逾時與緩衝設定可能不夠用:

location / {
    proxy_pass http://127.0.0.1:3000;

    proxy_connect_timeout 5s;   # 與後端建立連線的逾時時間
    proxy_read_timeout 60s;     # 等待後端回應的逾時時間
    proxy_buffering on;         # 是否先把後端回應緩衝起來再傳給客戶端
}

一般網站用預設值即可;如果後端是長時間運算的 API,或需要串流輸出(例如 Server-Sent Events),才需要調整 proxy_read_timeout 或關閉 proxy_buffering

下一步

單一後端伺服器容易成為單點故障。下一頁的 負載平衡(Upstream) 會說明如何用 upstreamproxy_pass 指向多台後端伺服器。