Nginx反向代理Node.js服务,外部网络无法访问问题求助
Nginx反向代理Express HTTPS服务器外部无法访问排查与解决
问题背景
在Windows 10系统上运行基于Express的Node.js HTTPS服务器,已配置No-IP DDNS及SSL证书,服务监听3000端口。希望通过Nginx反向代理实现无需指定端口、仅通过域名访问,目前Nginx在局域网内可正常工作,但外部网络无法访问。
已完成的排查操作
- 路由器已为服务器开放80和443端口,且临时关闭了Windows防火墙
- DDNS可用(同服务器上的Minecraft服务可被外部正常访问)
- 从access.log可见外部设备已成功发起请求:
X.X.X.X - - [05/Nov/2024:20:52:40 +0100] "GET / HTTP/1.1" 301 169 "-" "Mozilla/5.0 (Android 15; Mobile; rv:132.0) Gecko/132.0 Firefox/132.0" - error.log持续出现SSL握手错误:
客户端IP为本人公网IP,已知该错误可能无关紧要。2024/11/05 21:05:46 [info] 5276#10252: *943 SSL_do_handshake() failed (SSL: error:0A000412:SSL routines::sslv3 alert bad certificate:SSL alert number 42) while SSL handshaking, client: X.X.X.X, server: 0.0.0.0:443
当前Nginx配置
worker_processes 1; error_log logs/error.log; error_log logs/error.log notice; error_log logs/error.log info; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name servidordelacruz.dynns.com; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl; server_name xxxxxx.dynns.com; ssl_certificate route_to\cert.pem; ssl_certificate_key route_to\cert.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; location / { proxy_pass https://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } }
解决建议
- 统一域名配置:两个server块的
server_name不一致(一个是servidordelacruz.dynns.com,另一个是xxxxxx.dynns.com),会导致HTTPS请求无法匹配正确的服务器配置,需将两者统一为实际使用的DDNS域名。 - 修正证书路径格式:Windows系统下Nginx路径建议使用正斜杠
/而非反斜杠\,避免路径解析错误。例如将route_to\cert.pem改为route_to/cert.pem,或使用绝对路径如C:/nginx/certs/cert.pem。 - 验证SSL证书有效性:确认证书与域名匹配、未过期,若为CA颁发的证书需确保包含完整证书链。可通过
openssl s_client -connect 你的域名:443命令本地测试证书链完整性。 - 优化代理SSL配置:后端为HTTPS服务器时,可临时添加
proxy_ssl_verify off;(仅测试用,生产环境不推荐),或让Nginx信任后端证书;更推荐的方案是将后端改为HTTP服务,由Nginx统一处理HTTPS,减少SSL握手层级。 - 确认端口转发指向:检查路由器端口转发规则,确保80、443端口明确指向服务器的内网IP。
内容的提问来源于stack exchange,提问作者Alejandro
相关产品推荐
相关产品推荐

