相同的重定向适用于一个www到非www域,但使用nginx为第二个创建重定向循环

时间:2015-11-16 17:56:49

标签: .htaccess redirect nginx

我有2个使用Nginx重定向到不同端口的Meteor应用程序。对于每个应用程序,我有相同的配置文件,但不同的端口和域。第一个从www重定向到非www没有任何问题,但第二个显示消息:

  

此网页有重定向循环

在my-domain1.conf中:



server {
    server_name www.saveting.com;
    return 301 $scheme://saveting.com$request_uri;
}
server {
  listen                80;

  server_name           saveting.com www.saveting.com;

  access_log            /var/log/nginx/app.dev.access.log;
  error_log             /var/log/nginx/app.dev.error.log;

  location / {
    proxy_pass http://localhost:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header X-Forwarded-For $remote_addr;
  }
}




在my-domain2.conf中:



server {
    server_name www.downloadinstagramvideo.com;
    return 301 $scheme://downloadinstagramvideo.com$request_uri;
}
server {
  listen            80;

  server_name       downloadinstragramvideo.com www.downloadinstagramvideo.com;

  access_log          /var/log/nginx/app.dev.access.log;
  error_log           /var/log/nginx/app.dev.error.log;

  location / {
    proxy_pass http://localhost:3001;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header X-Forwarded-For $remote_addr;
  }
}




我尝试使用this tutorial对所有域进行一次重定向,使用以下代码:



server {
        server_name "~^(?!www\.).*" ;
        return 301 $scheme://www.$host$request_uri;
}




但这根本不起作用。什么可以导致第二个重定向循环?

1 个答案:

答案 0 :(得分:1)

第二个/第四个块中的server_name包含第一个/第三个块的名称,这是错误的。每个服务器块应具有不重叠的名称。如:

server {
  server_name www.saveting.com;
  ...
}
server {
  server_name saveting.com;
  ...
}
server {
  server_name www.downloadinstagramvideo.com;
  ...
}
server {
  server_name downloadinstragramvideo.com;
  ...
}