【问题标题】:nginx: Is it possible to have an 'catch all' error_page?nginx:是否有可能有一个'catch all' error_page?
【发布时间】:2012-08-14 02:52:10
【问题描述】:

在查看 nginx 的 error_page 指令的文档时,似乎必须手动列出 nginx(或上游服务器)可能返回的所有可能的状态代码。

例如:

error_page   404          /404.html;
error_page   502 503 504  /50x.html;
error_page   403          http://example.com/forbidden.html;
error_page   404          = @fetch;

是否可以为所有未直接指定的状态代码生成通配符...例如:

error_page   404          /404.html;
error_page   5xx          /50x.html;

error_page   404          /404.html;
error_page   502 503 504  /50x.html;
error_page   @catchall    /5xx.html;

【问题讨论】:

  • 如果您想为所有错误提供一个错误页面,您可以通过服务器端包含来实现。我为此写了一篇博文:blog.adriaan.io/one-nginx-error-page-to-rule-them-all.html
  • @adriaan 是否所有错误都只有一页?您的博客还说在每个 (http, server )both 指令中声明这个?

标签: configuration nginx webserver


【解决方案1】:

这是不可能的。

另外,不建议一味列出所有代码,因为

  • nginx 允许重新定义所有响应代码,包括那些您不想重新定义的响应代码,除非在一些非常特殊的情况下(例如,您通常不想重新定义 304(未修改),并且可能不会重新定义 302(找到) 除非有非常具体的原因);
  • 重新定义某些错误代码可能弊大于利(例如,重新定义 400(错误请求)是个坏主意)。

【讨论】:

  • 我认为 OP 不想重新定义任何错误代码,他们只是想要一个 html 模板。此外,3xx 响应代码不是错误代码 - 我相信问题只是大约 4xx 和 5xx 代码
  • @Bill,OP 足够明确,并要求“未直接指定的所有状态代码的通配符”。即使目标是仅重新定义 4xx/5xx 错误代码而不是 nginx 允许重新定义的所有状态代码 - 正如答案所解释的那样,这仍然是个坏主意。
猜你喜欢
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
  • 1970-01-01
  • 2012-02-01
  • 1970-01-01
  • 2014-11-09
相关资源
最近更新 更多