所以我想将请求代理传递到 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/
有人可以请概述我在此配置中缺少的内容。我还想将查询字符串转发到后端。
通过添加以下指令解决了该问题
这允许请求由上游端点的证书 SNI 中指定的服务器处理。
您正在侦听没有 SSL (http) 的端口 8080,并尝试代理到端口 443 (https) 上启用 SSL 的主机。如果这行得通,它基本上会使加密变得毫无意义,因为它只会在您的一端加密,而不是在数据包传输到您的客户端时加密。解决方案是确保您为相关端口安装了证书并启用了 ssl,并且任何 proxy_pass 都不会从未启用 ssl 的端口转发到启用 ssl 的端口。
我遇到了同样的问题,因为我的DNS 主机提供商有https,我不需要加密我的连接2 次,因为它会更慢。
它对我有用,如下所示: