我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

一、现象

使用nginx反向代理后端服务器时,由于配置了域名,导致HTTPS请求转发失败,报SSL错误,js报502。

图像

图2. 故障排除流程

1、查看nginx日志,发现报502,但本地curl中的后端域名可以正常通讯。

图像

2.检查后端服务器。没有收到请求,说明请求没有通过。继续排查nginx本身的配置问题。 Nginx渲染模板已经支持HTTPS。尝试跳过配置,直接在conf文件中渲染域名。请求仍然失败。

3、然后又改变主意,改成内网IP而不是域名。如果发现正常,那么尝试更换域名。

图像

图像

那你怀疑客户的域名有问题吗?但是这个域名是可以访问的。上面第一步已经测试过了。

4、这个时候只能翻一下错误日志,看看有没有什么有用的提示。

图像

可以看到nginx错误日志中有一系列看不懂的错误信息以及我们的访问状态。 nginx 将域名解析为IP 地址。当我尝试直接通过IP访问时,确实报错。

只能通过域名访问,这让我想起nginx在同一个端口配置不同域名,禁止访问未绑定的域名。这确实是可能的。这是 https 的 SNI 问题。你可以自己查一下信息。

3、解决方案

为了解决这个问题,nginx官方提供了参数配置。

图像

然后我就不再使用了,直接在conf文件中使用域名并添加配置;

图像

但如果我还想用它来做负载均衡,有什么办法吗?经过一番操作,发现可以如下配置,并且可以正常访问。

location ^~ /modules/abm/ {
proxy_ssl_server_name on;
proxy_ssl_name 域名;
proxy_set_header Host 域名;
proxy_pass https://abtest_management_api_backend/modules/abm/;
proxy_read_timeout 1800s;
proxy_set_header Origanization-Id qiancheng;
proxy_set_header X-Real-IP $clientRealIp;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header X-Accel-Buffering;
}

upstream abtest_management_api_backend {
server 域名:443;

}

问题解决了,大功告成! !

图4.原因分析

仔细查看nginx错误日志如下:

2023/07/07 00:03:56 [error] 29533#29533: *115403747 SSL_do_handshake() failed (SSL: error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:SSL alert number 40) while SSL handshaking to upstream, client: 192.168.73.157, server: localhost, request: "HEAD /modules/abm/_sendata_ab_testing/nm_rc-virtual-list-_c6c90.73efda43.js HTTP/1.1", upstream: "https://114.80.1xxx1:443/modules/abm/_sendata_ab_testing/nm_rc-virtual-list-_c6c90.73efda43.js", host: "sc.xxx.com"

错误分析:本地环境下直接请求域名是正常的;但使用nginx反向代理,请求时解析的是DNS域名,真正请求的是IP和端口,但对方系统有多个域名对应一个公网IP。这一个公网IP映射了多个项目和服务,通过nginx来区分,所以不能直接请求。

那么请求成功有两种方式:

1、直接域名请求;

2、IP端口请求,但请求时需要添加host;

即添加到nginx配置项中

e 开;

或者设置请求头

e 开;

域名;

主机域名;

(当你的nginx服务器作为反向代理,将请求转发给SSL服务器时,需要在HTTP请求头中包含SSL服务器的名称,以便SSL服务器能够正确响应请求。该指令是该指令通过SSL服务器的名称进行代理,即转发请求时,nginx会在请求头中添加“Host:”参数,以确保请求正确路由到目标SSL服务器。)

小知识: 1、多个域名访问不同系统且使用同一个公网IP时;可以为多个域名配置相同的公网IP和端口,映射到不同服务的nginx代理上,并通过nginx配置来识别源域名。确定访问来源并处理请求。 2、反向代理https请求,需要在编译安装nginx时添加配置模块--with-。使用阿里云的SLB作为负载均衡器。证书可以配置在负载均衡上,但必须选择七层负载均衡。 4、为什么添加主机时只能写域名,无法通过变量获取?

您可以将 Host 设置为 host 和 $。

host值设置为$,指的是nginx.conf中设置的host值,即192.168.1.3,即服务器的IP地址。

二维码
扫一扫在手机端查看

本文链接:https://by928.com/7607.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线