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