Nginx

為什麼我的 404 返回 200 狀態碼?

  • April 17, 2018

不知道為什麼,但我所有的錯誤頁面都以 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在配置中設置了一個應該更改該頁面的狀態。例如,如果您使用curlGoogle 的 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 。嘗試這樣做。(並且這樣的文件是否存在於其他伺服器上是完全無關的。)

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