使用 Nginx 的 ERR_TOO_MANY_REDIRECTS

Posted

技术标签:

【中文标题】使用 Nginx 的 ERR_TOO_MANY_REDIRECTS【英文标题】:ERR_TOO_MANY_REDIRECTS with nginx 【发布时间】: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;
        

我哪里错了?

【问题讨论】:

【参考方案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 浏览器中删除缓存解决了它。

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

【讨论】:

以上是关于使用 Nginx 的 ERR_TOO_MANY_REDIRECTS的主要内容,如果未能解决你的问题,请参考以下文章

Mac 使用 homebrew 安装 nginx

如何使用yum安装nginx

windows下nginx安装配置后怎么使用

nginx配置文件使用的是啥语言

nginx深入使用

话编程 | Nginx使用笔记