Nginx
為什麼我的 404 返回 200 狀態碼?
不知道為什麼,但我所有的錯誤頁面都以 200 響應。這對我來說有點奇怪,這些頁面存在但它們不應該有相應的狀態程式碼嗎?如何讓 Nginx 使用 404 狀態碼呈現我的 404 頁面?
例如:
▶ curl -I http://example.com/404 HTTP/1.1 200 OK <<--------------------------- WTF! THIS SHOULD BE 404!! Server: nginx/1.8.0 Date: Tue, 17 Apr 2018 02:24:04 GMT Content-Type: text/html; charset=UTF-8 ...
這是我的配置的相關部分:
server { listen 80 default_server; server_name example.com; root /var/www/example/static; index index.html; try_files $uri $uri/ $uri.html =404; # error pages error_page 400 =400 /400; # bad request error_page 401 =401 /401; # unauthorized error_page 403 =403 /403; # forbidden error_page 404 =404 /404; # not found error_page 408 =408 /408; # timeout error_page 500 502 503 504 =500 /500; # error }
在文件中是狀態:
…可以更改響應程式碼…使用“=response”語法
該頁面確實存在,但
error_page
在配置中設置了一個應該更改該頁面的狀態。例如,如果您使用curl
Google 的 404,您會得到正確的結果:curl -I https://www.google.com/404 HTTP/2 404 <<--------------------------- Ahhh, much better. content-type: text/html; charset=UTF-8 referrer-policy: no-referrer content-length: 1564
我需要我的 404 頁面來生成 404 狀態程式碼,因為我從我的應用程序的其他部分重定向到它。這對人類來說很好,但對機器不利,因為重定向會產生 302,然後是 200 而不是 404。
將 NGINX 配置為指向該頁面以發現真正的 404 錯誤。完成後,當您想將應用重定向到某個地方時,只需將它們重定向到虛假頁面
先前的答案說得對,當您將 404 頁面拉到其真實位置時,它將返回 200,因為您請求的頁面確實存在。
正如 joeqwerty 在評論中所說,nginx正確返回 200 是因為您要求提供一個存在的文件。如果您請求的文件不存在,您只會收到 404 。嘗試這樣做。(並且這樣的文件是否存在於其他伺服器上是完全無關的。)