You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx 443端口外部访问异常:内部正常外部无法连接

Nginx 443端口外部HTTPS访问失败问题排查与解决

问题核心分析

外部HTTPS访问域名时出现error:1400410B:SSL routines:CONNECT_CR_SRVR_HELLO:wrong version number,但外部用HTTP直接访问443端口、内部HTTPS访问均正常——说明外部流量到达服务器443端口时,接收到的是纯HTTP响应而非TLS握手响应,问题出在外部流量路径或服务器监听配置上,而非Nginx本地SSL配置。

排查与修复步骤

1. 检查DigitalOcean云防火墙规则

服务器本地ufw放行端口不代表DigitalOcean云防火墙也放行:

  • 登录DigitalOcean控制台,进入目标Droplet的「Networking」标签页
  • 查看Cloud Firewall的入站规则,确保存在允许HTTPS (443)(TCP协议,来源0.0.0.0/0和::/0)的规则
  • 若缺失,添加规则并等待5-10分钟生效

2. 修正Nginx监听地址

默认listen 443 ssl;仅监听IPv4,若服务器启用IPv6且DNS解析包含IPv6地址,会导致外部IPv6流量异常:

  • 修改Nginx的443服务器块配置:
    server {
        listen 443 ssl;
        listen [::]:443 ssl;  # 新增IPv6监听
        server_name [my_domain].com www.[my_domain].com;
        # 其余SSL、代理配置不变
    }
    
  • 重新加载配置:sudo nginx -s reload
  • 验证监听状态:ss -tulnp | grep 443,确认输出包含0.0.0.0:443和[::]:443

3. 排查端口占用情况

确保443端口仅被Nginx监听:

  • 执行命令:lsof -i :443 或 ss -tulnp | grep 443
  • 若输出显示非nginx的进程占用443,停止该进程并重启Nginx:sudo systemctl restart nginx

4. 清理iptables隐性规则

即使ufw显示规则正确,可能存在遗留iptables规则干扰:

  • 重置ufw并重新配置:
    sudo ufw reset
    sudo ufw enable
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    
  • 验证规则:sudo ufw status verbose

5. 检查第三方代理/CDN配置

若域名使用了CDN或第三方反向代理:

  • 确认CDN的SSL模式为「全加密(Strict)」,确保客户端到CDN、CDN到服务器均使用HTTPS
  • 检查代理服务是否错误地将HTTPS流量转发到服务器的HTTP端口

验证方法

完成修复后,从外部执行以下测试:

  • 执行curl -v https://[my_domain].com/api/ping,确认TLS握手正常且返回200 OK
  • 用telnet [my_domain].com 443连接后,输入GET /api/ping HTTP/1.1\r\nHost: [my_domain].com\r\n\r\n,若返回HTTPS相关错误(而非纯HTTP响应),说明TLS服务正常

内容的提问来源于stack exchange,提问作者Brik000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 20:58:09