我有一个 nginx 服务器,它充当负载均衡器。
nginx 配置为上游 3 次尝试:
proxy_next_upstream_tries 3
我正在寻找一种方法将此请求的当前尝试次数传递给后端服务器 - 即第一次、第二次或最后一次。
我相信可以通过在标头中传递这些数据来完成,但是,如何在 nginx 中配置它以及从哪里获取这些数据?
谢谢
我有一个 nginx 服务器,它充当负载均衡器。
nginx 配置为上游 3 次尝试:
proxy_next_upstream_tries 3
我正在寻找一种方法将此请求的当前尝试次数传递给后端服务器 - 即第一次、第二次或最后一次。
我相信可以通过在标头中传递这些数据来完成,但是,如何在 nginx 中配置它以及从哪里获取这些数据?
谢谢
我将此问题发送给 Nginx 支持,他们向我提供了以下解释:
只要您使用 proxy_next_upstream 机制进行重试,您尝试做的事情是不可能的。发送到下一个服务器的请求与发送到 nginx 尝试的第一个服务器的请求完全相同 - 或者更准确地说,这是同一个请求,创建一次,然后根据需要发送到不同的上游服务器。如果您想在后端知道它是在处理第一个请求还是在错误后处理重试请求,一个可行的选项是关闭 proxy_next_upstream,而是使用 error_page 指令重试 502/504 错误的请求。有关如何使用 error_page 的示例,
请参见http://nginx.org/r/error_page 。
所以,我按照他们的建议做了:
proxy_intercept_errors on;
location / {
proxy_pass http://example.com;
proxy_set_header NlbRetriesCount 0;
error_page 502 404 @fallback;
}
location @fallback {
proxy_pass http://example.com;
proxy_set_header NlbRetriesCount 1;
}