【发布时间】:2017-05-25 13:32:02
【问题描述】:
我已按照the instructions from here 设置 nginx 以将所有非 www 请求重定向到 www,但是当我尝试访问任何页面时,我的浏览器中不断收到 ERR_TOO_MANY_REDIRECTS。
我的目标是双重的:
- 所有没有 www 的请求都应该重定向到 www
- 所有非 HTTPS 请求都应重定向到 HTTPS
我的 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;
}
}
【问题讨论】: