Nginx正向代理https时502

报错提示: *1871 SSL_do_handshake() failed (SSL: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure) while SSL handshaking to upstream

场景:

今天开发反馈跟携程那边有个项目合作,需要应用能访问对方的域名。

由于我们的应用是部署在内网,只能通过nginx做个代理才能访问到对方的域名,本着多年背锅经验,一个nginx配置信手拈来:
在这里插入图片描述

配置完nginx潇洒 ./sbin/nginx -s reload, 然后就坐等开发喊666了,结果开发跑过来说报502错误…

WTF, 502 ??

在这里插入图片描述

我信你个鬼,你们这些开发坏的很,我自己试试

### 配置 Nginx 实现正向代理支持 HTTPS 为了使 Nginx 能够实现正向代理并支持 HTTPS 请求,需要解决其默认不支持 `HTTP CONNECT` 方法的问题。这可以通过引入第三方模块 `ngx_http_proxy_connect_module` 来完成[^2]。 #### 安装与编译 要启用对 HTTPS 的支持,需先重新编译 Nginx 并加入 `ngx_http_proxy_connect_module` 模块。以下是具体操作: 1. **下载模块源码** 访问该模块的 GitHub 页面获取最新版本代码: ```bash git clone https://github.com/chobits/ngx_http_proxy_connect_module.git ``` 2. **准备环境** 下载对应版本的 Nginx 源码包,并解压到本地路径下。假设当前使用的 Nginx 版本为 1.20.1,则执行以下命令: ```bash wget http://nginx.org/download/nginx-1.20.1.tar.gz tar -zxvf nginx-1.20.1.tar.gz cd nginx-1.20.1/ ``` 3. **配置编译选项** 添加自定义模块至编译参数中: ```bash ./configure --add-module=/path/to/ngx_http_proxy_connect_module make && sudo make install ``` 替换 `/path/to/ngx_http_proxy_connect_module` 为你实际克隆下来的模块目录位置。 #### 配置文件调整 编辑 Nginx 主配置文件(通常位于 `/etc/nginx/nginx.conf` 或安装路径下的 conf 文件夹),增加如下设置以允许 HTTP 和 HTTPS 流量通过代理转发: ```nginx http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent"'; access_log logs/access.log main; server { listen 8080; # 设置监听端口用于接收客户端请求 resolver 8.8.8.8 ipv6=off valid=30s; # DNS解析器, 可选其他公共DNS服务如114.114.114.114 location / { proxy_pass_request_headers on; # 对于非CONNECT类型的普通GET/POST等请求直接传递给目标站点 if ($request_method !~ ^(CONNECT|OPTIONS)$){ proxy_pass http://$host$request_uri; break; } # 处理HTTPS流量中的CONNECT指令 proxy_set_header Host $host; proxy_set_header Proxy ""; proxy_buffering off; proxy_store off; tcp_nodelay on; tcp_nopush on; set $target_host $host; set $target_port $arg_PORT; set $target_scheme ""; if ($request ~* "^CONNECT (.*)[:]([0-9]+)[ \t]*") { set $target_host $1; set $target_port $2; set $target_scheme https; } proxy_pass $target_scheme://$target_host:$target_port; } } } ``` 此段脚本实现了两个主要功能:一是常规网页浏览正常抓取远程资源;二是当遇到 SSL/TLS 加密连接建立阶段发送过来的 CONNECT 命令能够正确响应握手过程[^4]。 最后重启 Nginx 生效更改即可测试效果。 ---
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值