如何將 NGINX 反向代理到具有自簽名證書的後端伺服器?
我有一個帶有網路伺服器和 OpenVPN 訪問伺服器(帶有自己的網路界面)的小型網路。我只有 1 個公共 ip,希望能夠將子域指向網路伺服器上的網站(例如 website1.domain.com、website2.domain.com)並將子域 vpn.domain.com 指向 OpenVPN 訪問的網路界面伺服器。
經過一些Google操作後,我認為要走的路是設置代理伺服器。NGINX 似乎可以使用“proxy_pass”功能來做到這一點。我讓它適用於 HTTP 後端 URL(網站),但它不適用於 OpenVPN 訪問伺服器 Web 界面,因為它強制使用 HTTPS。我對 HTTPS 很好,並且更喜歡將它用於託管在網路伺服器上的網站。預設情況下是自簽名證書。已安裝,我也想使用自簽名證書。對於其他網站。
我如何“接受”自簽名證書。對於後端伺服器?我發現我需要生成一個證書。並在 NGINX 反向代理配置中定義它,但我不明白這是如何工作的,例如我的 OpenVPN 伺服器已經安裝了 SSL 證書。我可以通過https://direct.ip.address.here/admin訪問 OpenVPN Web 界面,但是當我嘗試通過 Chrome 訪問 Web 界面時出現“此站點無法提供安全連接”頁面。
我的 NGINX 反向代理配置:
server { listen 443; server_name vpn.domain.com; ssl_verify_client off; location / { # app1 reverse proxy follow proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass https://10.128.20.5:443; proxy_ssl_verify off; } access_log /var/log/nginx/access_log.log; error_log /var/log/nginx/access_log.log; } server { listen 80; server_name website1.domain.com; location / { # app1 reverse proxy follow proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://10.128.11.20:80; } access_log /var/log/nginx/access_log.log; error_log /var/log/nginx/access_log.log; }
一個附近的想法…… 也許NGINX根本不是適合這個的工具(現在或長期)?讓我們假設我可以修復證書。我目前遇到的問題,我們需要更多的後端 Web 伺服器來處理流量,是否也可以擴展 NGINX 代理?像集群或負載均衡器之類的?我應該尋找一個完全不同的工具嗎?
您的 443 伺服器塊未針對 SSL 請求進行配置。您需要添加
ssl
到listen
指令並配置ssl_certificate
和ssl_certificate_key
.例如
server { listen 443 ssl; ssl_certificate /path/to/ssl/certificate.pem; ssl_certificate_key /path/to/ssl/certificate.key; # ...
您可以在此處找到有關這些設置和其他 TLS/SSL 相關設置的更多資訊:http: //nginx.org/en/docs/http/configuring_https_servers.html。
我目前遇到的問題,我們需要更多的後端 Web 伺服器來處理流量,是否也可以擴展 NGINX 代理?
NGINX 可以很好地垂直擴展(增加一台伺服器上的資源)。如果您想添加更多 NGINX 伺服器(用於水平可擴展性或高可用性)並且您只有一個公共 IP 地址,則需要管理虛擬 IP(VIP)。您可以使用該
keepalived
服務來管理 VIP。但是,對於小型網路,我認為您不需要這個。