Nginx HTTP转HTTPS(含端口、反向代理)问题求助
问题排查与解决方案
核心问题
你的Nginx配置仅在443端口开启了SSL加密,但你访问的是10923这类非标准HTTPS端口,这些端口没有绑定SSL证书,导致浏览器无法建立安全连接。HTTP访问正常是因为你配置了80端口的监听,且HTTP不需要证书验证。
修复方案
根据你的需求(端口不固定),有两种可行思路:
思路1:为固定自定义端口配置SSL(适合端口可提前确定的场景)
如果能提前确定需要使用的自定义端口,直接在Nginx配置中为这些端口添加带SSL的监听规则,示例修改如下:
server {
server_name viewer.grieferbot.site;
location / {
proxy_pass http://127.0.0.1$request_uri;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
listen 80;
listen 443 ssl;
listen 10923 ssl; # 添加自定义SSL端口,可重复添加多个
ssl_certificate /etc/letsencrypt/live/viewer.grieferbot.site/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/viewer.grieferbot.site/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
修改后重启Nginx,确保防火墙开放对应端口。
思路2:使用标准HTTPS端口(推荐,适配动态端口场景)
如果端口每次都不同,无法提前配置,建议直接使用标准443端口访问https://viewer.grieferbot.site,你的现有配置已经默认支持443端口的SSL加密,只需确保:
- 服务器防火墙开放443端口
- 域名DNS解析指向正确的服务器IP
- 应用服务的请求能通过Nginx的443端口正常代理
额外验证步骤
- 检查SSL证书有效性:执行命令
openssl x509 -in /etc/letsencrypt/live/viewer.grieferbot.site/fullchain.pem -text -noout,确认证书域名匹配、有效期正常。 - 测试端口连通性:用
telnet viewer.grieferbot.site 目标端口或curl -v https://viewer.grieferbot.site:目标端口排查端口是否可正常访问。 - 清除浏览器缓存:避免旧连接信息干扰,用隐私模式重新访问测试。
内容的提问来源于stack exchange,提问作者Neo




