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

Ubuntu本地Nginx HTTP转HTTPS出现重定向循环错误求助

解决Nginx HTTP转HTTPS重定向循环问题

问题原因

你遇到的循环重定向错误,主要有两个核心原因:

  1. 变量使用错误:Nginx中不存在$request_url这个内置变量,正确指代完整请求路径的变量是$request_uri,用错变量会导致重定向逻辑异常。
  2. 重定向规则范围错误:如果把重定向代码加到了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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:57:25