Ubuntu下OpenSSL版本错误:Nginx 8080端口HTTPS访问失败求助
问题分析与解决方案
你的问题核心是:当前Nginx的8080端口仅配置处理HTTP请求,但你用HTTPS协议访问这个端口,导致客户端发起SSL握手时,Nginx返回的是HTTP响应,从而触发SSL版本不匹配错误(error:0A00010B:SSL routines::wrong version number)。
解决步骤
1. 修改Nginx配置,让8080端口支持HTTPS
需要在server块中添加SSL相关配置,让Nginx在8080端口先处理SSL握手,再将请求代理到后端HTTP服务:
server { listen 8080 ssl; # 替换为你的SSL证书和私钥实际路径 ssl_certificate /etc/nginx/ssl/your_domain.crt; ssl_certificate_key /etc/nginx/ssl/your_domain.key; # 可选:配置安全的SSL协议和加密套件 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # 后端是HTTP服务,无需proxy_ssl_server_name,可删除该行 } }
2. 验证配置并重启Nginx
- 检查配置语法是否正确:
nginx -t - 重启Nginx生效:
systemctl restart nginx(根据系统不同,也可使用service nginx restart)
其他可选方案
如果不想让8080同时处理HTTP和HTTPS,也可以单独开一个标准HTTPS端口(比如443)处理加密请求,保留8080作为纯HTTP端口:
# 保留原HTTP 8080端口配置 server { listen 8080; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } # 新增HTTPS 443端口配置 server { listen 443 ssl; ssl_certificate /etc/nginx/ssl/your_domain.crt; ssl_certificate_key /etc/nginx/ssl/your_domain.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
关键注意点
- 确保SSL证书文件权限正确,Nginx进程需要能读取这些文件(可设置权限为
640,所属组设为nginx) - 如果使用自签名证书,用curl访问时需添加
-k参数跳过证书验证,或者将证书导入系统信任列表 proxy_ssl_server_name仅当后端服务是HTTPS时才需要配置,后端为HTTP时可直接删除该行
内容的提问来源于stack exchange,提问作者stanley355
相关产品推荐
相关产品推荐

