Nginx保持无限重定向

时间:2017-05-25 13:32:02

标签: ssl redirect nginx

我已经按照the instructions from here设置了nginx,将所有非www请求重定向到www,但是当我尝试点击任意页面时,我的浏览器中仍然会收到ERR_TOO_MANY_REDIRECTS

我的目标是双重的:

  1. 所有没有www的请求都应重定向到www
  2. 非HTTPS的所有请求都应重定向到HTTPS
  3. 我的nginx配置如下所示:

    upstream mywebsite_proxy {
      server unix:/home/deploy/mywebsite/tmp/sockets/puma.sock;
    }
    
    server {
      listen   80;
      listen   [::]:80;
      listen   443 default_server ssl;
    
      server_name www.mywebsite.com;
    
      if ($scheme = http) {
        return 301 https://$server_name$request_uri;
      }
    
      location / {
        proxy_pass http://mywebsite_proxy;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }
    
      location ~ ^/(robots.txt|sitemap.xml.gz)/  {
        root /home/deploy/mywebsite/public;
      }
    }
    

    请注意,没有任何SSL证书的引用。我正在使用启用了SSL的Cloudflare,当我的配置看起来像下面的那个时,HTTPS似乎正好在门外工作。非www到www和非http到https重定向显然不起作用...

    upstream mywebsite_proxy {
      server unix:/home/deploy/mywebsite/tmp/sockets/puma.sock;
    }
    
    server {
      listen 80;
      listen 443;
      server_name www.mywebsite.com mywebsite.com;
      root /home/deploy/mywebsite/public;
    
      location / {
        proxy_pass http://mywebsite_proxy;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }
    
      location ~ ^/(robots.txt|sitemap.xml.gz)/  {
        root /home/deploy/mywebsite/public;
      }
    }
    

2 个答案:

答案 0 :(得分:1)

在我看来,你不需要if部分:

if ($scheme = http) {
    return 301 https://$server_name$request_uri;
  }

重定向应如下所示:

    return 301 https://$server_name$request_uri;

如果要进行永久重定向,请使用301,如果您不希望永久重定向,则将其存储在浏览器的缓存中或302中。此外,您可以删除www。部分在server_name中并使用return 301 https://www.$server_name$request_uri;

答案 1 :(得分:0)

我在之前的一个项目中做了类似的事情,以下是步骤:

  1. 保留默认配置'nginx.conf'原样。
  2. 修改了/ etc / nginx / sites-available / default (要点:https://gist.github.com/faizulhaque-tp/db576dc6f22c820a0e23f7a6e1c8b740
  3. 除非www到www,以上配置有效。