與我的問題有關如何使用 nginx 設定反向代理,我現在在設定額外需要 SSL 連線的過程中陷入困境。
我有 docker 容器,它向我的主機系統提供映射的 SSL 連接埠 4430。網路伺服器正在使用自簽名憑證。
在我的/etc/hosts
文件中,我定義了:
127.0.0.1 app.local
我的 nginx 伺服器配置如下:
server {
listen 80;
server_name app.local;
location / {
return https://$host$request_uri;
}
}
server {
listen 443;
server_name app.local;
location / {
proxy_pass https://127.0.0.1:4430;
}
}
當我使用它來存取我的網路應用程式時,https://127.0.0.1::4430
它工作正常。不過,我第一次收到有關證書的警告,然後我必須允許。
然而,當通過http://app.local
或連接到它時https://app.local
,我的瀏覽器顯示:
SSL connection error
ERR_SSL_PROTOCOL_ERROR
我還期待出現證書警告,然後我可以允許。
在 nginx 中使用 SSL 時如何讓反向代理程式運作?
答案1
要終止 nginx 上的 SSL:
a) 伺服器部分需要指定連接埠和“ssl”
listen 192.168.2.26:443 ssl;
b) 伺服器區塊也指定憑證和 ssl 參數
ssl_certificate new-cert.cer;
ssl_certificate_key new-cert.key;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
答案2
我想你已經很接近了(我自己是 Nginx 新手),但是你的第二個伺服器區塊需要更多......我的伺服器上有一個這樣的:
listen 443 ssl;
listen [::]:443 ipv6only=on ssl;
charset utf-8;
client_max_body_size 75M;
server_name example.com www.example.com;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
請注意以下事項:
- Listen 指令指定 ssl。
- 指定證書和證書密鑰。該證書應該位於易於訪問的位置,因為它會發送給訪問您網站的每個人。密鑰位於只有需要它的使用者才能存取它的地方。
ipv6、字元集和客戶端最大主體是我在伺服器上的行,但您在這裡所做的事情不需要。您可以將它們命名為任何名稱並將它們放置在任何地方,因此如果您將檔案儲存在其他位置,請不要糾結於確切的檔案名稱或位置。這正是我喜歡的方式,我的ls -l
輸出是:
-rw-r--r-- 1 root root 1887 Oct 8 14:16 /etc/ssl/certs/example.com.crt
-rw-r----- 1 root ssl-cert 1704 Oct 8 13:47 /etc/ssl/private/example.com.key