NGINX 返回带有自定义错误文档的正确标头

Smu*_*dge 6 nginx

我已经设置 NGINX 为我的代理服务器返回自定义错误文档,它显示正确的文件但总是返回一个200 OK标题。

相关的 NGINX 配置是

server {
    listen       94.23.155.32:80;
    server_name  rmg.io www.rmg.io;

    proxy_intercept_errors on;

    location / {
        proxy_pass http://rmgshort/;
    }

    error_page 404 = /error/404.html;
error_page 500 501 502 503 503 = /error/500.html;

    location /error/ {
        root /var/rmg/;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你想,你可以对此进行测试,这个页面应该返回404错误,它返回正确的文档,但更改状态代码“200 OK”(测试HTTP头位置),如果我更换root /var/rmg/internal;正确的标题是返回,但随后我自定义错误页面不起作用。

如何让 NGINX 返回带有正确状态标题的自定义错误文档?

我在 RHEL 6.1 上运行 NGINX 1.0.4

wom*_*ble 12

=出的error_page指令; 您可以使用=NNN(例如=401)指定任何您喜欢的返回代码,但是如果您给出一个空的,=则表示“使用错误处理程序的错误代码”,对于静态文件,它始终为“200 OK”。如果没有 any =,您将得到返回的原始错误代码。

令人恼火的是,直接阅读(否则)精美手册(无论如何在撰写此答案时)可能会让您认为它是相反的(=保留原始返回码),但本地测试表明它确实有效我上面描述的方式。

  • 这并不完全准确。一个空的 `=` 意味着 Nginx 将使用指定错误处理程序返回的状态代码。这意味着如果你执行 `error_page 404 = /handler.php` 并且你的 `handler.php` 脚本返回 200 那么它使用 200,如果 `handler.php` 返回 409 那么它使用 409。不过,我同意维基条目措辞不好,我会尝试澄清一下。 (3认同)