Nginx

如何使用 nginx 設置 SSL 反向代理?

  • October 13, 2015

與我關於如何使用 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

我也期待證書警告出現,然後我可以允許。

將 SSL 與 nginx 一起使用時如何使反向代理正常工作?

在 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;

我想你已經很接近了(我自己是 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;

請注意以下事項:

  1. listen 指令指定 ssl。
  2. 指定證書和證書密鑰。證書應該放在易於訪問的地方,因為它會發送給訪問您網站的每個人。密鑰位於只有需要它的使用者才能訪問的地方。

ipv6、charset 和 client max 正文是我在伺服器上的行,但對於您在這裡所做的事情並不需要。您可以將它們命名為任何名稱並將它們放置在任何地方,因此如果您將文件儲存在其他地方,請不要擔心確切的文件名或位置。這就是我喜歡的方式,我的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

引用自:https://serverfault.com/questions/728611