Nginx

nginx proxy_pass 到 https

  • December 20, 2021

所以我想將請求代理傳遞到 https 後端伺服器,但是,每次我嘗試使用 https:// 配置的後端重新載入 nginx 伺服器時,都會收到以下錯誤:

nginx: [emerg] https protocol requires SSL support

這是 nginx 配置

server{

   listen 8080;

   root /opt/nginx_1.17.0/nginx_ok/html;
   server_name www.frontedndomain.com;

   index index.php index.html;

           location /health-monitor/ {
                   add_header Custom-Header test;
           }

           location ~* ^\/([a-z][a-z]\/)?abc\/?(.*)? {
                   error_log /opt/nginx_1.17.0/nginx_ok/logs/proxy_error.log;
                   add_header X-query-string $is_args$query_string;
                   resolver 0.0.0.0;
                   resolver_timeout 15s;
                   proxy_pass https://backenddomain.com;
                   proxy_ssl on;
                   proxy_http_version 1.1;
                   proxy_set_header Accept-Encoding "";
                   proxy_set_header Cache-Control no-cache;
                   proxy_set_header Upgrade $http_upgrade;
                   proxy_set_header Connection 'upgrade';
                   proxy_set_header X-Real-IP $remote_addr;
                   subs_filter_types *;
          }
   }

最初我為原始碼建構了 nginx,這是 nginx -V 的輸出

nginx 版本: nginx/1.16.0 由 gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 建構 配置參數: –prefix=/opt/nginx_1.17.0/nginx_ok/ –sbin-path=/ opt/nginx_1.17.0/nginx_ok/sbin/nginx –with-openssl=/opt/nginx_1.17.0/openssl-1.1.1c/ –add-module=/opt/nginx_1.17.0/ngx_http_substitutions_filter_module/ –with-zlib =/opt/nginx_1.17.0/zlib-1.2.11/

有人可以請概述我在此配置中缺少的內容。我還想將查詢字元串轉發到後端。

通過添加以下指令解決了該問題

proxy_ssl_server_name 開啟;

這允許請求由上游端點的證書 SNI 中指定的伺服器處理。

您正在偵聽沒有 SSL (http) 的埠 8080,並嘗試代理到埠 443 (https) 上啟用 SSL 的主機。如果這行得通,它基本上會使加密變得毫無意義,因為它只會在您的一端加密,而不是在數據包傳輸到您的客戶端時加密。解決方案是確保您為相關埠安裝了證書並啟用了 ssl,並且任何 proxy_pass 都不會從未啟用 ssl 的埠轉發到啟用 ssl 的埠。

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