Nginx
在 Nginx 伺服器上強制 SSL 時重定向循環
最近我一直在嘗試使用 Nginx 重定向到 HTTPS,但是在我嘗試在瀏覽器中訪問我的網站後,我不斷收到重定向循環。這是我的完整伺服器塊配置文件:
server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; listen 443 ssl; root /var/www; index index.php index.html index.htm home.html contact.html projects.html; # Make site accessible from http://localhost/ server_name melone.co; return 301 https://$host$request_uri; ssl_certificate /path/to/ssl; ssl_certificate_key /path/to/ssl; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; proxy_set_header X-Forwarded-Proto $scheme; } error_page 404 /404.html; # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } }
在四處搜尋後,我發現這
return 301 https://$host$request_uri;
將是最簡單的方法。所以我將它實現到我的配置文件中,然後執行
sudo service nginx restart
. 然後我去我的瀏覽器,我得到了一個重定向循環。一旦我刪除了那一行程式碼,它就消失了。所以我認為我真正在尋找的是一種更有效的重定向到 SSL 的方法。任何幫助,將不勝感激。謝謝
就目前而言,您將所有流量重定向到
https
,這對流量有好處http
,但對於https
流量來說毫無意義,並導致重定向循環。現在發生的情況如下:http
->https
->https
->https
->https
->https
… 等等,直到你的瀏覽器告訴你,“夠了,我們不會成功” .您想要實現的是將
http
流量重定向到https
,並處理https
流量(就像您之前對http
流量所做的那樣)。因此,您必須將配置拆分為兩個
server
指令:一個 forhttp
(應該進行重定向),另一個 forhttps
,它將處理流量。看看這個例子:
server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; server_name melone.co; return 301 https://$host$request_uri; }
將此
server
塊添加到您的配置中,刪除現有server
塊中的相應行,然後獲利!