nginx 使用内置错误页面,而不是我的自定义页面

nginx 使用内置错误页面,而不是我的自定义页面

我的 nginx 服务器按预期使用我的自定义文件响应未找到的 URL 。现在我希望它在我设置为 1 时404.html发送我的。但它却发送了熟悉的内置503.html$maintenance503服务暂时不可用 |nginx错误页面。

server {
    listen 80;
    server_name tarfu.example.com;
    root /var/www/v2/doc_root/web;
    if ($maintenance = 1) {
        return 503;
    }

    error_page 400 /error_pages/400.html;
    error_page 403 /error_pages/403.html;
    error_page 404 /error_pages/404.html;
    error_page 503 /error_pages/503.html;
    error_page 500 501 502 504 /error_pages/500.html;
    location ^~ /error_pages/ {
        root /var/www;
        internal;
    }
}

503.htmlQ1:为什么这个配置会让 nginx在到达时使用其内置页面而不是我的文件return 503

Q2:我怎样才能改变这个配置来得到我想要的东西?

答案1

A1

每个 nginx'陷阱和常见错误return 指令仅适用于其定义的最顶层上下文。

nginx 的配置指令参考return中提到,重写模块停止处理并将指定的代码返回给客户端。

Myreturn 503在服务器上下文中定义。因此,它将应用于 nginx 路由到该服务器的每个请求。在处理客户端请求时,它会停在那里并将其“重写”为 503 的“请求”。它使用由 my 配置定义的相同搜索结构,并再次命中,return 503而不使用location提供 my 文件路径的上下文503.html。无法找到 my,503.html它会返回自己的文档。

A2

按照理查德·史密斯 (Richard Smith) 在评论中所建议的那样,将其移动到服务器块的块子块if ($maintenance = 1) {return 503;}内部。location / {}

相关内容