Nginx 默认页面的自定义状态代码

Nginx 默认页面的自定义状态代码

我仅具有 Nginx 上游的经验,没有提供静态文件的经验。

Nginx 有一个默认服务器,它为欢迎使用 nginx!页面,并在虚拟主机上没有匹配项时显示。我想保留此默认页面,但覆盖200状态代码404

我不知道该怎么做。有什么想法吗?

答案1

您可以使用以下方式返回带有错误代码的页面

error_page 404 /index.html;

只要root在您的服务器块中将其定义为 nginx 的默认路径即可。Nginx.org 有详尽的文献资料所有这些都值得一看。

重写 200

很危险。但是,您可以使用return它来响应对服务器中其他任何地方的请求,这将正确调用 error_page 指令。如果您将其放在服务器块的底部,它将充当未在其他地方指定的请求的捕获器:

location / {
    return 404;
}

这里是 的文档return

为了真正严谨,您还可以省略 error_page 指令,而只编写重定向 URL(对于从 0.8.42 版本开始的代码 301、302、303、307 和 308):

location / { 
    root /path/to/www/nginx;
    return 301 /index.html;
}

或者响应正文(适用于其他代码):

location / { 
    root /path/to/www/nginx;
    return 404 '404 error';
}

...但如果出现任何问题,这可能会很难排除故障。


稍微阐述一下

Nginx 具有相当简单的语法来区分状态代码和页面。在一个server块内,您可以定义rootnginx 查找所请求的静态页面的位置。当请求静态页面但未找到、无法读取或发生其他情况时,nginx 将获取状态代码并采取行动。如果该代码为 200,它将处理 html、php 或其他内容,这可以(并且通常会)触发一系列对文件系统或其他套接字的请求,以提供页面的这一部分或那一部分。成功时的结果将发送到浏览客户端,失败时将返回错误的默认页面。在这两种情况下,也会返回状态代码(允许浏览器端自定义 404 和其他错误)。

error_page指令只是告诉 nginx 接下来要跟踪什么请求。实际上,这个请求甚至不必是磁盘上的文件。它可以是location具有自己的一组规则的名称。nginx 的默认配置很好地说明了这一点:

error_page 500 502 503 504 /50x.html;
location = /50x.html {
    root /usr/share/nginx/www;
}

因此,当出现 503 时,nginx 将请求 /50x.html,并且对 50x.html 的任何请求的位置语句定义了查找此文件的根路径。

相关内容