如何在 Nginx 中建立反向代理

NGINX 是一種通用且高效能的 Web 伺服器,廣泛用作反向代理伺服器。反向代理是客戶端請求的中介,將它們分發到一個或多個後端伺服器。此設定有利於負載平衡、提高安全性並提供高可用性。使用 NGINX 作為反向代理可以增強 Web 服務的可擴充性和可靠性。

本指南將示範如何在 NGINX 中建立反向代理,並涵蓋將用戶端請求有效路由到後端伺服器所需的設定步驟。

在 Nginx 中建立和設定反向代理

在 Nginx 中設定基本反向代理

首先,要開始將 Nginx 設定為反向代理,請存取 Nginx 設定檔。通常,此檔案位於 /etc/nginx/nginx.conf。使用您喜歡的文字編輯器開啟它,例如使用 sudo Nano:

sudo nano /etc/nginx/nginx.conf

在設定檔中,重點放在 http 區塊。在這裡,您將插入一個伺服器區塊,它是反向代理設定的基石。伺服器區塊在指定連接埠(通常是連接埠 80)上偵聽 HTTP 流量。在這個區塊中,位置/指令告訴 Nginx 如何處理傳入的請求。使用 proxy_pass 指令將這些請求重新導向到由其 IP 位址或主機名稱指定的後端伺服器。

例如,配置可能如下所示:

http {
    ...
    server {
        listen 80;
        location / {
            proxy_pass http://backendserver_address;
        }
    }
}

請記得將 backendserver_address 替換為您的後端伺服器的實際位址。這個簡單的設定告訴 Nginx 將所有傳入的 HTTP 請求轉送到指定的後端伺服器。

Nginx 中的高階反向代理配置

在更進階的設定中,您可能需要配置反向代理的其他方面。這可以包括負載平衡、SSL 終止或快取的設定。

實作負載平衡

如果您執行多個後端伺服器,Nginx 可以在它們之間分配傳入流量,從而提高效能和可靠性。為了實現負載平衡,您可以修改 proxy_pass 指令以指向上游區塊中定義的一組伺服器。例如:

http {
    upstream backend_servers {
        server backend1.example.com;
        server backend2.example.com;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://backend_servers;
        }
    }
}

此配置允許 Nginx 平衡 backend1.example.com 和 backend2.example.com 之間的負載。

配置 SSL 終止

對於 SSL 終止,請確保伺服器區塊偵聽連接埠 443 並包含 SSL 憑證和金鑰檔案位置。配置可能類似:

server {
    listen 443 ssl;
    ssl_certificate /path/to/certificate.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://backendserver_address;
    }
}

此設定使 Nginx 能夠在將請求傳遞到後端伺服器之前處理 SSL 連線並解密請求。

完成變更

配置 Nginx 後,使用以下命令測試配置是否有語法錯誤:

nginx -t

如果測試通過,請使用以下命令重新載入 Nginx 以套用變更:

sudo systemctl reload nginx

此步驟可確保您的變更在不中斷目前連線的情況下生效。

附加學習:設定 Nginx 代理標頭值

將 Nginx 配置為反向代理程式時,正確設定代理程式標頭值非常重要。這些標頭對於將原始客戶端請求詳細資訊傳送到後端伺服器至關重要。此資訊可以包括客戶端的 IP 位址、請求的原始協定等。正確設定這些標頭可確保後端伺服器具有適當回應請求所需的上下文。

了解代理標頭

代理標頭在反向代理設定中至關重要,因為它們攜帶有關客戶端原始請求的資訊。此資訊對於後端伺服器做出有關處理傳入請求的明智決策是必要的。例如,了解客戶端的原始 IP 位址對於日誌記錄、分析或安全目的非常重要。

常見的代理標頭配置

您可以在 Nginx 中設定的一些常見代理程式標頭包括:

  • X-Real-IP:此標頭用於將原始客戶端的 IP 位址傳遞到後端伺服器。
  • X-Forwarded-For: 如同 X-Real-IP,該標頭攜帶請求所經過的所有伺服器的列表,包括客戶端的IP。
  • X-Forwarded-Proto:此標頭指示客戶端原始請求中使用的協定(HTTP 或 HTTPS)。

在 Nginx 中實作代理標頭設定

要在 Nginx 設定中設定這些標頭,您必須修改伺服器區塊中的位置區塊。以下是如何設定這些標頭的範例:

server {
    listen 80;
    location / {
        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;
        proxy_pass http://backendserver_address;
    }
}

在此設定中, $remote_addr 和 $scheme 是 Nginx 分別自動填入客戶端 IP 位址和請求方案(HTTP 或 HTTPS)的變數。

代理標頭的最佳實踐

配置代理標頭時,考慮轉發訊息的安全性和準確性非常重要。為了防止潛在的欺騙,請確保您的後端伺服器配置為僅當這些標頭來自 Nginx 反向代理時才信任這些標頭。

結論

透過成功將 NGINX 配置為反向代理,您可以最佳化您的 Web 基礎設施,以獲得更好的效能、安全性和可擴充性。定期監控和調整您的配置,以確保最佳的負載分配和回應時間。使用 NGINX 實作反向代理程式為管理用戶端請求和維護 Web 服務的高可用性提供了強大的解決方案。

Joshua James
跟我來
Joshua James 的最新帖子 (看全部)

發佈留言