jwe*_*rre 0 http nginx http-status-code-404 http-status-code
不知道为什么,但我所有的错误页面都以 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
...
Run Code Online (Sandbox Code Playgroud)
这是我的配置的相关部分:
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
}
Run Code Online (Sandbox Code Playgroud)
在文档中指出:
... 可以更改响应代码 ... 使用“=response”语法
该页面确实存在,但error_page
在配置中设置了 an应该会更改该页面的状态。例如,如果您使用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
Run Code Online (Sandbox Code Playgroud)
我需要我的 404 页面来生成 404 状态代码,因为我从应用程序的其他部分重定向到它。这对人类很好,但对机器不利,因为重定向会产生 302 后跟 200 而不是 404。
正如 joeqwerty 在评论中所说,nginx正确返回 200,因为您要求提供一个存在的文档。如果您请求不存在的文档,您只会得到 404 。尝试这样做。(并且这样的文档是否存在于其他服务器上完全无关。)
归档时间: |
|
查看次数: |
5643 次 |
最近记录: |