我已经按照the instructions from here设置了nginx,将所有非www请求重定向到www,但是当我尝试点击任意页面时,我的浏览器中仍然会收到ERR_TOO_MANY_REDIRECTS
。
我的目标是双重的:
我的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;
}
}
答案 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)
我在之前的一个项目中做了类似的事情,以下是步骤:
除非www到www,以上配置有效。