nginx proxy_pass 到 https

nginx proxy_pass 到 https

因此,我想将请求 proxy_pass 到 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/

有人能概述一下我在这个配置中缺少什么吗?我还想将查询字符串转发到后端。

答案1

通过添加以下指令解决了该问题

proxy_ssl_server_name 开启;

这允许上游端点的证书 SNI 中指定的服务器处理该请求。

答案2

您正在监听没有 SSL (http) 的端口 8080,并尝试代理到端口 443 (https) 上启用 SSL 的主机。如果此方法有效,则加密实际上将变得毫无意义,因为它只会在您的终端加密,而不会在数据包传输到您的客户端时加密。解决方案是确保您已安装证书并为相关端口启用 SSL,并且任何 proxy_pass 都不会从未启用 SSL 的端口转发到启用 SSL 的端口。

答案3

我也遇到了同样的问题,因为我的DNS 主机提供商https我不需要加密我的连接2次,因为这样会比较慢。

它对我的作用如下:

  upstream backend {
        server node_socket1:3000 weight=10 max_fails=3 fail_timeout=30s;
        server node_socket2:3000 weight=10 max_fails=3 fail_timeout=30s;
  }

  server {
        listen 80;
        server_name 0.0.0.0;
        root  /var/www/public;

        location / {
              try_files $uri $uri/ https://backend;
        }

        location /socket.io/ {
              proxy_http_version    1.1;
              proxy_redirect        off;
              proxy_set_header      Upgrade $http_upgrade;
              proxy_set_header      Connection "upgrade";
              proxy_set_header      Host $host;
              proxy_set_header      X-Real-IP        $remote_addr;
              proxy_set_header      X-Forwarded-For  $proxy_add_x_forwarded_for;
              proxy_set_header      X-NginX-Proxy    true;
              proxy_pass            https://backend/socket.io/;
        }
  }

相关内容