Nginx

如何將 NGINX 反向代理到具有自簽名證書的後端伺服器?

  • November 16, 2020

我有一個帶有網路伺服器和 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 請求進行配置。您需要添加ssllisten指令並配置ssl_certificatessl_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。但是,對於小型網路,我認為您不需要這個。

引用自:https://unix.stackexchange.com/questions/589673