nginx:有没有可能有一个“捕获所有”的error_page?

sbdsn5lh  于 2023-02-21  发布在  Nginx
关注(0)|答案(2)|浏览(143)

在查看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;
waxmsbnn

waxmsbnn1#

这是不可能的
此外,不建议盲目列出所有代码,因为

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

kx5bkwkv2#

location {
  ...

  error_page
    301 302 303 304 307 308
    400 401 402 403 404 405 406 408 409 410 411 412 413 414 415 416 421 429
    500 501 502 503 504 505 507
    @errors;

  location @errors {
    internal;
    default_type "text/plain; charset=utf-8";
    return 200 "$status\n";
  }
}

响应可以通过为每个HTTP代码定义一个map来提供类似“404 Not Found”的状态消息,如所有Nginx错误代码的一个位置块中所述

相关问题