Ubuntu本地Nginx HTTP转HTTPS出现重定向循环错误求助
解决Nginx HTTP转HTTPS重定向循环问题
问题原因
你遇到的循环重定向错误,主要有两个核心原因:
- 变量使用错误:Nginx中不存在
$request_url这个内置变量,正确指代完整请求路径的变量是$request_uri,用错变量会导致重定向逻辑异常。 - 重定向规则范围错误:如果把重定向代码加到了HTTPS的
server块中,会导致HTTPS请求被强制重复重定向到HTTPS,形成无限循环。
解决方案
按照以下步骤调整Nginx配置,让HTTP和HTTPS请求的处理逻辑完全分离:
1. 配置HTTP监听(80端口)的server块
这个块专门负责接收HTTP请求并重定向到HTTPS,无需处理静态文件:
server { listen 80; server_name localhost; # 永久重定向到HTTPS,使用正确的$request_uri变量 return 301 https://$host$request_uri; }
2. 配置HTTPS监听(443端口)的server块
这个块负责处理实际的静态站点请求,同时配置好SSL证书:
server { listen 443 ssl; server_name localhost; # 替换为你本地生成的SSL证书路径 ssl_certificate /etc/nginx/ssl/localhost.crt; ssl_certificate_key /etc/nginx/ssl/localhost.key; # 替换为你的静态站点根目录 root /var/www/your-static-site; index index.html index.htm; location / { try_files $uri $uri/ =404; } }
3. 验证配置并重启Nginx
- 先检查配置文件语法是否正确:
sudo nginx -t - 如果提示
test is successful,重启Nginx使配置生效:sudo systemctl restart nginx
额外说明
- 之前不加重定向时HTTP无法访问,是因为你没有配置监听80端口的server块,导致HTTP请求未被Nginx处理。
- 本地测试可使用自签名SSL证书,虽然浏览器会弹出安全提示,但不会引发重定向循环问题。
内容的提问来源于stack exchange,提问作者yogihosting
相关产品推荐
相关产品推荐

