nginx ssl 代理到多個 apache 伺服器
我有多個通過 HTTP 的 nodejs Web 應用程序伺服器,我需要驗證發送到這些伺服器的請求。我正在考慮使用 nginx 作為請求的代理,僅使用 SSL 證書驗證 nginx 伺服器,以便通過 HTTPS 提供發送回客戶端的數據/圖像。
這是我想到的結構:
+--- app1 ---> node.js on ip:10001 | client --> https --> nginx --> http --- app2 ---> node.js on ip:10002 | +--- app3 ---> node.js on ip:10003
我關心的是來自代理請求的響應對象。基於 Webkit 的瀏覽器和 Safari 警告我,我的應用程序使用 HTTPS,但通過 HTTP 提供內容(混合內容警告)。
通過驗證代理伺服器,我對客戶端的響應會被驗證為 HTTPS 還是 HTTP?
我的 nginx 代理將有一個經過認證的子域,如proxy.domain.com,因此請求將被完成,例如,如“ https://proxy.domain.com:10001 ”。請求是通過 HTTPS 向代理完成的,但返回的伺服器內容是通過 HTTP 的。代理將如何處理此類返回的內容?
它會應用 SSL 加密,因此像這樣發回資源:“ https://proxy.domain.com:10001/resource.png ”
提前謝謝大家
您正在嘗試的內容被命名為 SSL 終止。當反向代理處理 SSL 然後將請求轉發到使用 HTTP 協議的代理伺服器時。因此客戶端將具有 HTTPS 連接,但從反向代理 (nginx) 到代理伺服器 (apache) 將具有 HTTP 連接。在 nginx 中,您執行以下操作:
server { listen 443 ssl; server_name www.example.com; ssl_certificate www.example.com.chained.crt; ssl_certificate_key www.example.com.key; location /{ proxy_pass http://upstream_name:80; 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; proxy_set_header X-Forwarded-Scheme $scheme; } }
如果您想進一步研究它,可以使用 Nginx https://www.nginx.com/resources/admin-guide/nginx-ssl-termination/的官方文件。對於混合內容,我想我對@Bert 有同樣的看法。這可能是因為在 HTML 中您仍然使用 http 協議。