Nginx 根据上游响应代码返回 444

Nginx 根据上游响应代码返回 444

我已将 nginx 设置为使用代理传递到上游。上游被写入为对某些请求返回 502 http 响应,而不是返回带有所有标头的 502。我希望 nginx 识别这一点并返回 444,这样就不会返回任何内容。这可能吗?

我也尝试在任何 50x 错误上返回 444,但它也不起作用。

location / {
    return 444;
}


location ^~ /service/v1/ {
    proxy_pass http://127.0.0.1:3333;
    proxy_next_upstream error timeout http_502;
    error_page  500 502 503 504  /50x.html;
}

location = /50x.html {
    return 444;
}

error_page  404              /404.html;
location = /404.html {
    return 444;
}

答案1

是的,这是可能的。根据错误页面,可以这样做……

error_page  500 502 503 504 =444 /50x.html;

同样地...

error_page 404 =444 /404.html;

因此,您的整个示例配置将变成......

地点 / {
    返回444;
}

位置 ^~ /service/v1/ {
    代理密码 http://127.0.0.1:3333;
    proxy_next_upstream 错误超时http_502;
    错误页面 500 502 503 504 =444 /50x.html;
}

错误页面404 =444 /404.html;

答案2

如果后端确实返回了 502,并且不是由于后端无法访问而由 nginx 内部生成的,那么你需要打开proxy_intercept_errors以使您的 error_page 指令生效。

相关内容