Nginx

在 Nginx 伺服器上強制 SSL 時重定向循環

  • July 11, 2016

最近我一直在嘗試使用 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指令:一個 for http(應該進行重定向),另一個 for https,它將處理流量。

看看這個例子:

server {
   listen 80 default_server;
   listen [::]:80 default_server ipv6only=on;
   server_name melone.co;
   return 301 https://$host$request_uri;
}

將此server塊添加到您的配置中,刪除現有server塊中的相應行,然後獲利!

引用自:https://serverfault.com/questions/742678