公网转发服务器访问超时问题排查总结

一、问题基础信息

1. 业务架构

采用公网跳板机反向代理内网服务架构(企业常用内网服务外网隔离方案):

  • 公网跳板机IP:218. xx.xx.xx(云服务器,外网唯一入口)

  • 域名:client. xxx-domain .com(DNS解析指向上述公网IP)

  • 80端口:对外公开业务后台系统,全网可访问

  • 443端口:对外公开客户端后台系统,支持全网可访问,适配外网用户访问客户端后台业务

2. 故障现象

  • http://218. xx.xx.xx :80:正常连通、页面可正常访问

  • https://218. xx.xx.xx :443:请求超时、TCP连接失败

  • 业务影响:外网无法正常访问客户端后台系统

  • 网页报错:网页解析失败,可能是不支持的网页类型,请检查网页或稍后重试

3. 本地网络校验结果

  • 外网正常:百度443端口连通正常,本地网络、防火墙无异常

  • 端口差异化异常:仅目标服务器443端口阻断,80端口完全通畅

二、核心原理:为何域名能访问内网服务器?

内网服务器为私有IP网段,无法直接被外网访问,依靠公网跳板机 + Nginx反向代理实现外网访问内网服务,完整流程:

  1. 本地DNS解析:client.xxx-domain.com 解析到公网跳板IP 218.xx.xx.xx

  2. 本地发起TCP连接,访问跳板机对应端口

  3. 云安全组校验流量,放行后进入跳板机系统

  4. 跳板机Nginx根据域名/端口匹配对应内网服务

  5. 跳板机通过内网专线转发请求至真实内网业务服务器

  6. 内网服务处理请求,原路返回数据至本地

端口业务定位逻辑:80端口、443端口均为对外公开业务端口,承载不同模块的后台系统,均需支持全网访问;原外网隔离策略已取消,适配公开业务需求

三、443端口超时根本原因(精准定位)

网络访问存在两层防火墙拦截机制,必须同时放行才可连通,缺一不可:

1. 第一层:云平台安全组(外网入口)

默认配置:仅放行80端口全网访问,443端口 默认 未对外开放,外网流量直接在云网关被丢弃,需手动配置全网放行规则。

2. 第二层:服务器系统内部防火墙(本机入口)

即使安全组放行443,服务器Windows/Linux内部防火墙未添加443入站规则,流量进入服务器后被系统拦截,TCP握手失败。

3. 辅助潜在原因

  • Nginx未监听443端口、SSL证书异常,服务未启动

  • 运维安全策略:443端口为公开客户端后台业务,需放开全网访问权限,默认未开放,需手动配置两层防火墙放行规则

四、完整问题处理流程(从临时解决到根治)

方案二:根治方案(运维配置,永久恢复443访问)

核心:两层防火墙必须同时放行443端口

步骤1:云安全组放行443端口(优先IP白名单,安全可控)
  • 规则方向:入方向

  • 协议:TCP

  • 端口:443/443

  • 授权对象:0.0.0.0/0(全网所有IPv4地址),实现443端口全网可访问

步骤2:服务器内部防火墙放行443端口

Windows服务器:防火墙高级设置 → 新建入站规则 → 放行TCP 443端口

Linux服务器(CentOS):

复制代码

firewall-cmd --add-port=443/tcp --permanent firewall-cmd --reload

步骤3:校验服务状态
  • 确认Nginx正常监听443端口、SSL证书配置正常

  • 确认跳板机与内网客户端服务链路通畅

步骤4:本地验证连通性
复制代码

Test-NetConnection 218.xx.xx.xx -Port 443

返回 TcpTestSucceeded: True 即为配置生效,可正常对外提供客户端后台访问服务

五、关键核心结论(避坑重点)

  1. 只开安全组、不开系统防火墙,443绝对无法访问,两层防火墙缺一不可

  2. ping超时 ≠ 服务宕机,服务器可禁用ICMPping,端口连通性才是业务可用标准

  3. 80和443为两套独立服务、独立防火墙规则,80通不代表443通

  4. 443端口为对外公开客户端后台系统,可配置0.0.0.0/0全网放行,面向全网用户提供服务,需做好系统登录鉴权、接口安全防护、漏洞加固等配置

  5. 最优长期方案:开发连接公司VPN,内网环境天然放行443端口,无需修改安全组

六、排查命令汇总

# 测试公网连通性 Test-NetConnection www.baidu.com -Port 443

# 测试目标80端口连通性 Test-NetConnection 218.xx.xx.xx -Port 80

# 测试目标443端口连通性 Test-NetConnection 218.xx.xx.xx -Port 443

# 路由追踪故障节点 tracert 218.xx.xx.xx