不知道为什么,但我所有的错误页面都以 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。
正如 joeqwerty 在评论中所说,nginx正确返回 200 是因为您要求提供一个存在的文档。如果您请求的文档不存在,您只会收到 404 。尝试这样做。(并且这样的文件是否存在于其他服务器上是完全无关的。)
将 NGINX 配置为指向该页面以发现真正的 404 错误。完成后,当您想将应用重定向到某个地方时,只需将它们重定向到虚假页面
先前的答案说得对,当您将 404 页面拉到其真实位置时,它将返回 200,因为您请求的页面确实存在。