【问题标题】:ERR_TOO_MANY_REDIRECTS with nginx使用 Nginx 的 ERR_TOO_MANY_REDIRECTS
【发布时间】:2018-03-06 21:53:47
【问题描述】:

我想将我的所有http 流量重定向到https。我正在使用letsencrypt。我在网上看到return 301 https://$server_name$request_uri; 会将所有到我网站的流量重定向到https,但结果却是ERR_TOO_MANY_REDIRECTS

没有上面提到的声明一切正常,但是我必须在 URL 中特别指定https。这是我的/etc/nginx/sites-available/default 文件:

server {
        listen 80 default_server;
        listen 443 ssl default_server;

        ssl_certificate /etc/letsencrypt/live/mywebsite.me/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/mywebsite.me/privkey.pem;

        root /home/website/mywebsite/public;

        index index.html index.htm index.php;

        server_name mywebsite.me www.mywebsite.me;

        return 301 https://$server_name$request_uri;

        location / {
                try_files $uri $uri/ /index.php$is_args$args;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        }
}

我哪里错了?

【问题讨论】:

    标签: redirect nginx https


    【解决方案1】:

    就我而言,它是 Cloudflare。我不得不更改为完全 SSL 加密

    【讨论】:

    • 就是这样!谢谢!
    • 你是英雄。
    • 一读到 CloudFlare,我就像“天哪,我完全忘记了这一点”。谢谢你提醒我!
    • 是的,我使用 Cloudflare,但是当你有多个服务器块时,它不会强制 redr 到 HTTPS 仍然允许 HTTP
    • 请给这家伙一枚勋章! :D
    【解决方案2】:

    将您的配置更改为以下

    server {
            listen 80 default_server;
            server_name mywebsite.me www.mywebsite.me;
    
            return 301 https://$server_name$request_uri;
    }
    
    server {
    
            listen 443 ssl default_server;
    
            ssl_certificate /etc/letsencrypt/live/mywebsite.me/fullchain.pem;
            ssl_certificate_key /etc/letsencrypt/live/mywebsite.me/privkey.pem;
    
            root /home/website/mywebsite/public;
    
            index index.html index.htm index.php;
    
            server_name mywebsite.me www.mywebsite.me;
    
            location / {
                    try_files $uri $uri/ /index.php$is_args$args;
            }
    
            location ~ \.php$ {
                    include snippets/fastcgi-php.conf;
                    fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
            }
    }
    

    您当前的配置在 http 和 https 上都重定向到 https。因此,由于 return 语句,它变成了一个无限循环。仅当连接为 http 时才需要返回语句。所以你把它分成两个服务器块

    【讨论】:

      【解决方案3】:

      我有同样的问题。我发现了很多关于它的问题/答案和文章,但没有任何帮助。 然后我尝试从不同的浏览器访问我的网站,它工作得很好! 从我的 chrome 浏览器中删除缓存解决了它。

      所以 - 请记住,当您尝试不同的解决方案来清除缓存时

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-17
        • 2016-05-23
        • 2019-07-23
        • 2019-09-05
        • 1970-01-01
        • 2019-05-07
        • 2021-07-23
        相关资源
        最近更新 更多