如何正确使用 nginx echo 支持来响应 504 内联页面?

如何正确使用 nginx echo 支持来响应 504 内联页面?

我正在尝试使用 nginx echo 支持用自定义 504 页面进行回复,但是由于某种奇怪的原因,当此功能处于活动状态时,浏览器会下载响应而不是打开它。

server {
    listen   80;
    proxy_intercept_errors on;
    server_name  localhost;

    location @fallback {
        add_header Content-Type "text/html; charset=UTF-8";
        add_header Content-Disposition 'inline; filename="504.html"';

        # when this line is enabled I get the download behavior!
        # when this is not active, I get a 200 response, which is not desired                      
        echo_status 504;

        echo "<!DOCTYPE html>";
        echo "<html lang='en'>";
        echo "  <head>";
        echo "    <meta charset='utf-8'>";
        echo "    <title>Backend is down</title>";
        echo "  </head>";
        echo "  <body>";
        echo "    Backend service is offline, please retry in few minutes. $echo_timer_elapsed";
        echo "  </body>";
        echo "</html>";
    }

    location / {
        error_page 502 504 = @fallback;
        proxy_connect_timeout   10s;
        proxy_pass        http://google.com:1234;
    }
}

答案1

嘿,我今天正在使用类似的配置测试回声模块,用于自定义“403”......

我没有正确阅读文档,谷歌搜索让我找到了你的问题。

硒:http://wiki.nginx.org/HttpEchoModule#Content_Handler_Directives

不要使用 add_header Content-Type 尝试:

默认类型“text/html; charset=UTF-8”;

我不确定 add_header 是否应该工作,但是模块手册中没有提到它。[编辑]:此外,default_type 很可能已经在 nginx 全局配置中设置为:default_type application/octet-stream;我忘记了这一点,所以如果您想在浏览器中看到响应,最好在这里更改它。[/编辑]

*注意:如果您不想看到“200”响应,您仍应保留“echo_status 504;”。

相关内容