基于SSH堡垒机的Node.js API通过Nginx配置自签名证书问题排查
Nginx配置排查(自签名证书+SSH隧道场景)
核心语法错误修正
你的Nginx配置存在语法错误,server mysite.com;是无效指令,必须改为server_name mysite.com;,修正后的基础配置如下:
server{ listen 443 ssl; # 推荐将ssl与listen合并写法,替代单独的ssl on; server_name mysite.com; ssl_certificate /etc/ssl/server.crt; ssl_certificate_key /etc/ssl/server.key; location / { proxy_pass http://ip-x-x-x-x.ec2.internal:3000/; # 注意此处目标地址修正 } }
分点排查项
1. Nginx配置有效性验证
- 执行
nginx -t检查配置语法,若报错需根据提示修正(如路径错误、语法问题) - 重启Nginx:
systemctl restart nginx(Ubuntu/Debian)或service nginx restart,确保配置生效 - 查看Nginx错误日志:
tail -f /var/log/nginx/error.log,定位具体报错(如证书读取失败、反向代理连接超时)
2. 反向代理目标地址正确性
你的SSH隧道是本地8081映射到堡垒机→私有服务器3000,但Nginx部署在堡垒机上时,proxy_pass不能写localhost:3000(除非堡垒机本地另有转发隧道),必须直接指向私有服务器的内网地址:http://ip-x-x-x-x.ec2.internal:3000/
- 在堡垒机上执行
curl http://ip-x-x-x-x.ec2.internal:3000,验证是否能正常获取Node.js应用响应
3. SSL证书相关检查
- 确认
/etc/ssl/server.crt和/etc/ssl/server.key文件存在,且权限正确:chmod 600 /etc/ssl/server.key chown root:root /etc/ssl/server.crt /etc/ssl/server.key - 访问时必须使用
https://mysite.com,而非HTTP(Nginx仅监听443端口)
4. 网络与DNS配置
- 确认
mysite.com已解析到EC2堡垒机的公网IP(可通过nslookup mysite.com验证) - 检查EC2安全组:允许入站443端口(TCP),否则外部请求会被拦截
- 检查堡垒机防火墙(如ufw):是否开放443端口,执行
ufw allow 443开放
5. 应用与隧道可用性
- 在私有服务器上执行
pm2 list,确认Node.js应用处于online状态;查看应用日志:pm2 logs - 确认堡垒机到私有服务器的内网连通性:在堡垒机ping私有服务器内网IP,或telnet 3000端口验证
内容的提问来源于stack exchange,提问作者switcher
相关产品推荐
相关产品推荐

