Nginx

帶有 http/https 的 Nginx - Http 似乎一直重定向到 https

  • September 3, 2013

我的 ubuntu 10.04 / nginx 1.2.3 伺服器有這種非常奇怪的行為。基本上我今天早上更改了 SSL 證書。從那以後它在所有應用程序上的行為都表現得很奇怪。Godaddy 報告 HTTPS/SSL 設置正確。

當我嘗試使用 HTTPS 時,它仍然可以正常工作。但是當我嘗試使用 HTTP nginx 報告錯誤時:

400 Bad Request
The plain HTTP request was sent to HTTPS port

在Google上看了幾個小時後,我嘗試了不同的設置(雖然最初我的設置可以正常工作很長時間,但我只是更新了證書)

我通過將其添加到我的配置中找到了一個半解決方案:

error_page 497 $request_uri;

真正奇怪的是,當我使用此設置時:

server {
   listen 80;
   server_name john.johnrocks.eu;

   access_log /home/john/envs/john_prod/nginx_access.log;
   error_log /home/john/envs/john_prod/nginx_error.log;

   location / {
       uwsgi_pass unix:///home/john/envs/john_prod/john.sock;
       include uwsgi_params;
   }

   location  /media  {
       alias   /home/john/envs/john_prod/johntab/www;
   }

   location  /adminmedia  {
       alias   /home/john/envs/john_prod/johntab/www/adminmedia;
   }
}

使用 HTTP 時我仍然有同樣的錯誤(雖然這裡沒有為 HTTPS 設置任何內容)??

我快瘋了!

**更新

即使使用此配置:

server {
   listen       80;
   server_name  john.johnrocks.eu;

   access_log  /home/john/envs/john_prod/nginx.access.log;

   location / {
       root   /home/john/envs/john_prod/johntab/www;
       index  index.html index.htm;
   }
}

我嘗試載入的所有內容都收到錯誤 400(純 HTTP 請求已發送到 HTTPS 埠)..

所以我發現了問題所在。問題來自 nginx 如何載入 vhosts 配置。如果你查看 nginx.conf,你會發現這一行

include /etc/nginx/sites-enabled/*;

因此,這會將所有“虛擬主機”以隨機順序載入到主 nginx.conf 中。所以發生的事情是錯誤出現在其他地方,在另一個虛擬主機中……並且它使所有虛擬主機基本上都失敗了(nginx沒有檢測到錯誤,這本身不是錯誤,而是錯誤的配置)。

所以我刪除了所有啟用站點的虛擬主機,並將它們一個一個放回去,每次重新載入 nginx 並測試站點,直到我把它們都弄好,然後瞧

我不知道 400 錯誤,但如果您在以前的配置中有 301(永久)重定向,瀏覽器可能仍將此重定向儲存在記憶體中並且不檢查原始重定向。也許清除記憶體可能會有所幫助。

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