我正在尝试使用 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;”。