【问题标题】:How to add the 'upstream try' to the request which I send to the backend server如何将“上游尝试”添加到我发送到后端服务器的请求中
【发布时间】:2018-10-15 14:47:12
【问题描述】:
我有一个 nginx 服务器,它充当负载平衡器。
nginx 配置为上游 3 次尝试:
proxy_next_upstream_tries 3
我正在寻找一种方法将此请求的当前尝试次数传递给后端服务器 - 即第一次、第二次或最后一次。
我相信可以通过在标头中传递这些数据来完成,但是,如何在 nginx 中配置它以及从哪里获取这些数据?
谢谢
【问题讨论】:
标签:
nginx
nginx-reverse-proxy
nginx-config
【解决方案1】:
我将此问题发送给 Nginx 支持,他们向我提供了以下解释:
只要你使用 proxy_next_upstream 机制
重试,您尝试做的事情是不可能的。请求
发送到下一个服务器的与那个完全相同
发送到 nginx 尝试的第一台服务器 - 或者更准确地说,这是
相同的请求,创建一次,然后发送到不同的上游
服务器根据需要。
如果您想在后端知道它是否正在处理第一个
请求或它在错误后处理重试请求,工作
选项是关闭 proxy_next_upstream ,而是
使用 error_page 指令重试 502/504 错误请求。
有关如何使用的示例,请参阅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;
}