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

如何配置Nginx实现无端口URI重定向并解决SSL握手错误

问题

在Ubuntu 22.04 LTS服务器部署WebApp并配置Nginx后,sites-available下的配置如下:

server {
    listen 80;
    server_name example www.example.de;

}
server {
    listen 443 ssl;
        root /var/www/example.de/html;
        index index.html index.htm index.nginx-debian.html;

        server_name example.de www.example.de;

    ssl_certificate /etc/nginx/ssl/_ssl_certificate.cer;
    ssl_certificate_key /etc/nginx/ssl/_private_key.key;

location / {
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;
proxy_pass http://127.0.0.1:4567;
}

location /auth/google/ {
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;
proxy_pass https://127.0.0.1:4567/auth/google/;
proxy_ssl_server_name on;
}

}

Nginx错误日志出现以下错误:

[error] 5875#5875: *3 SSL_do_handshake() failed (SSL: error:0A00010B:SSL routines::wrong version number) while SSL handshaking to upstream, client: 12.123.12.0, server: example.de, request: "GET /auth/google/ HTTP/1.1", upstream: "https://127.0.0.1:4567/auth/google/", host: "example.de"

尝试多种proxy_pass、rewrite及重定向规则均未解决,求处理方案。

解决方法
  • 问题根源:后端WebApp在4567端口运行的是HTTP服务,而非HTTPS服务。你配置的proxy_pass https://127.0.0.1:4567/auth/google/会让Nginx尝试和后端建立SSL连接,但后端不支持SSL协议,导致握手失败,出现版本号错误。
  • 修正核心配置:将/auth/google/ location块里的proxy_pass改为HTTP协议,和根路径的配置保持一致,同时移除不必要的SSL相关配置:
location /auth/google/ {
    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;
    proxy_pass http://127.0.0.1:4567/auth/google/;
}
  • 额外优化建议:
    1. 80端口的server块添加HTTP到HTTPS的重定向,避免空配置:
server {
    listen 80;
    server_name example.de www.example.de;
    return 301 https://$server_name$request_uri;
}
  1. 验证后端服务协议:在服务器本地执行curl http://127.0.0.1:4567/auth/google/,如果能正常返回内容,说明后端确实是HTTP服务;若执行curl https://127.0.0.1:4567/auth/google/报错,则进一步确认后端未启用SSL。
  • 生效配置:修改完成后,执行nginx -t检查配置语法是否正确,无错误后执行systemctl reload nginx重启Nginx使配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:15:24