Nginx
帶有 http/https 的 Nginx - Http 似乎一直重定向到 https
我的 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(永久)重定向,瀏覽器可能仍將此重定向儲存在記憶體中並且不檢查原始重定向。也許清除記憶體可能會有所幫助。