nginx 上游的错误响应

nginx 上游的错误响应

我的上游出现了问题。Web 应用程序有一个位置块,如下所示。我正在用它进行 AB 测试。

location / {
   include backend.conf;
}

后端配置文件

proxy_buffering on;
proxy_set_header RIP $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
set $session_id_included 'false';

if ($request_uri ~ ';jsessionid=') {
    set $session_id_included 'true';
}

if ($query_string ~ ';jsessionid=') {
    set $session_id_included 'true';
}

proxy_set_header SESSION_ID_INCLUDED $session_id_included;
proxy_pass_header  Set-Cookie;
proxy_intercept_errors on;
proxy_connect_timeout 30;
proxy_read_timeout 30;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404 ;


proxy_set_header Host 'example.com';;
proxy_pass http://backend;

此位置块正在查看:

upstream backend {
  ip_hash;
  server backend_server_1 max_fails = 0 weight = 80; # old web application
  server backend_server_2 max_fails = 0 weight = 20; # new web application
}

实际上,一切正常。但是,当我使用 ip_hash 连接到 backend_server_1 时,backend_server_2 发出了 404 错误响应。

如何获取我登录的后端服务器的404错误响应?

如果用户使用ip_hash连接到backend_server_1服务器,则404错误一定来自backend_server_1服务器。

如果用户使用ip_hash连接到backend_server_2服务器,则404错误一定来自backend_server_2服务器。

谢谢

答案1

如果该指令proxy_next_upstream包含http_404,那么从一个上游服务器返回的 404 错误将使 nginx 将该请求传递给下一个上游服务器。

删除非默认条目http_404将使 nginx 仅提供用户所连接的服务器的 404 答案。

请注意,在这种情况下,该max_fails参数意义不大,因为(引用nginx 代理模块手册):

该指令还定义了什么被视为与服务器通信失败的尝试。[..] http_403 和 http_404 的情况永远不会被视为失败的尝试。

这意味着你可以使用尝试会计通过max_fails更优雅地处理 AB-Test 故障的一方面。如果 404 问题是禁用它的原因,请现在重新考虑。

相关内容