Nginx反向代理Https域名时,请求报错502问题排查

Nginx反向代理Https域名时,请求报错502问题排查,在使用nginx反向代理后端服务器的时候,因为配置的是域名,导致HTTPS 请求转发失败,报 SSL 错误,js 报 502,Nginx反向代理Https域名时,请求报错502问题排查,Nginx反向代理Https域名时,请求报错502问题排查,1、查看nginx日志,发现报502,但是本地curl upstream中的后端域名是可以正常通的。,Nginx反向代理Https域名时,请求报错502问题排查,2、查看后端服务器上,没有收到请求,说明请求没过去,继续排查nginx本身的配置问题,Nginx 渲染模版已支持 HTTPS,尝试略过 upstream 配置,直接在 conf 文件中渲染 https://域名,请求仍然失败。,3、然后换个思路,修改成内网ip不走域名,发现是正常,那换个域名试试。,Nginx反向代理Https域名时,请求报错502问题排查,Nginx反向代理Https域名时,请求报错502问题排查,然后怀疑客户的域名有问题?但是这域名是可以访问的,上面第一步已经测试过了。,4、这个时候只能翻一下错误日志,看看有什么有用的提示。,Nginx反向代理Https域名时,请求报错502问题排查,可以看到nginx错误日志里面有一串看不懂的报错提示和我们访问情况,nginx把域名解析成了一个ip地址,当我试着直接通过ip去访问时,果然报错了。,只能通过域名去访问,让我想起来了nginx同端口不同域名及禁用未绑定域名访问的配置,确实可以实现,这是https的SNI问题,大家可以自行查阅资料。,https://www.realks.com/2021/03/07/nginx-proxy-ssl-server-name/ https://freexyz.cn/server/98212.html。,为解决这个问题,nginx官方给出了一个参数配置。,Nginx反向代理Https域名时,请求报错502问题排查,然后我不使用 upstream了,而直接在 conf 文件中使用 https://域名 并且加上配置 proxy_ssl_server name_on。,Nginx反向代理Https域名时,请求报错502问题排查,但是我如果还是想用upstream来负载均衡,有没有办法呢?一顿操作,发现可以像下面这样配置,也是可以正常访问的。,问题解决,搞定!!,仔细查看nginx error日志日志如下:,报错分析:在本地环境直接请求域名正常;但使用了nginx反向代理,在请求时DNS域名进行解析,真正请求出去的为IP与端口,但对方系统是多个域名对应一个公网ip,这个一个公网IP下映射到了多个项目和服务,通过nginx的server_name进行区分,故直接请求不通。,所以能成功请求方式有两种:,1、直接域名请求。,2、IP端口请求,但请求时需添加host。,即在nginx配置项中增加。,proxy_ssl_server_name on。,或者设置请求头。,proxy_ssl_server_name on。,proxy_ssl_name 域名。,proxy_set_header Host 域名。,(当你的nginx服务器作为反向代理,将client的请求转发到一个SSL服务器时,需要在HTTP请求头中包含SSL服务器的名称,这样SSL服务器才能正确地响应该请求。proxy_ssl_name指令就是设置proxy_pass指令所代理的SSL服务器的名称,即www.example.com。这样,在转发请求时,nginx就会在请求头中添加”Host: www.example.com”的参数,保证请求被正确地路由到目标SSL服务器。),小知识:1.多个域名访问不同系统,使用同一个公网IP的情况;可以多个域名配置同一个公网IP和端口,映射到不同服务的nginx代理上,通过nginx配置server_name识别源域名,判定访问来源,进行请求处理。2.反向代理https请求,nginx编译安装时需要增加配置模块–with-http_ssl_module 3.使用阿里云的SLB作为负载均衡,证书可以配置在SLB上,但是要选择七层负载均衡。4.为啥添加host的时候只能写域名,不能通过变量获取。,proxy_set_header可以设置Host为host与$http_host。,host的值设置为$proxy_host,是指nginx.conf的proxy_pass中设置的host值,也就是192.168.1.3,也就是服务器的IP地址。,不是一个固定的变量,他其实是http_HEADER通配后的结果。,http_content_type表示请求头里content-type属性的值,同理,$http_host指的就是请求头里的host属性。,$host是core模块内部的一个变量。,当请求头里不存在Host属性或者是个空值,$host则等于server_name,如果请求头里有Host属性,那么host就是www.example.com

文章版权声明

 1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/29155.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年6月23日
下一篇 2023年7月15日