后端启动时,HAProxy 有时会对相同请求做出 NOSRV 响应

后端启动时,HAProxy 有时会对相同请求做出 NOSRV 响应

我向 haproxy 发出相同的请求(POST /user/oauth),但有时会收到 503,直接向后端发送请求总是有效的

这是日志:

  1. 本地服务器〜app / s2 0/0/0/100/100 200 813 - - --VN 1/1/0/0/0 0/0“POST /用户/oauth HTTP/1.1”
  2. 本地服务器〜app / s1 0/0/1/107/108 200 820 - - --NI 1/1/0/0/0 0/0“POST /用户/oauth HTTP/1.1”
  3. 本地服务器〜app / NOSRV 0 / -1 / -1 / -1 / 0 503 216 - - SCNN 1 / 1 / 0 / 0 / 0 “POST /用户/oauth HTTP / 1.1”
  4. 本地服务器〜app / NOSRV 0 / -1 / -1 / -1 / 0 503 216 - - SCNN 1 / 1 / 0 / 0 / 0 “POST /用户/oauth HTTP / 1.1”
  5. 本地服务器〜app / s2 0/0/1/106/107 200 831 - - --NI 2/2/0/0/0 0/0“POST /用户/oauth HTTP/1.1”
  6. 本地服务器〜app / s1 0/0/1/3/6206 101 337 - - --NI 3/3/1/1/0 0/0“GET / HTTP/1.1”
  7. 本地服务器〜app / s1 0/0/1/83/84 200 258 - - --VN 2/2/0/0/0 0/0“POST / transaction / concludeTransaction HTTP / 1.1”
  8. 本地服务器〜app / NOSRV 0 / -1 / -1 / -1 / 0 503 216 - - SCNN 1 / 1 / 0 / 0 / 0 “POST /用户/oauth HTTP / 1.1”
  9. 本地服务器〜app / s2 0/0/1/107/108 200 831 - - --NI 1/1/0/0/0 0/0“POST /用户/oauth HTTP/1.1”

正如您所看到的,POST /user/oauth 有时转到 s1,有时转到 s2,有时转到 NOSRV。

有时它会连续 10 次通过,有时它会连续 10 次失败。

这是我的配置:

defaults
log     global
mode    http
option  httplog
option  dontlognull
timeout connect 10000
timeout client  50000
timeout server  50000
retries 3
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http

frontend local_server
bind *:8080 ssl crt /etc/letsencrypt/live/xxx/sslcert.pem
mode http
default_backend app

backend app
balance roundrobin
cookie SERVERID insert indirect nocache
http-send-name-header Host
server s1 172.26.13.134:3000 check cookie s1
server s2 172.26.13.134:3000 check cookie s2
http-request add-header X-Server %b

编辑:

我确实将请求重定向到在本地主机上运行的快速 python 服务器,但问题仍然存在。所以我确实编辑了 haproxy 配置文件,只让服务器 s1 127.0.0.1:8086 检查 cookie s1

并运行 python 脚本:python3 -m http.server 8086 --bind 127.0.0.1&

当我从邮递员那里点击时,我连续获得了 3 个 succ,而不是 503。

答案1

我相信问题出在版本上,我在某处读到 1.9 版本比 2.* 运行得更好,我下载了源代码并使用以下选项进行编译:make TARGET=linux-glibc USE_PCRE2=1 USE_PCRE2_JIT=1 USE_OPENSSL=1 USE_ZLIB=1 USE_REGPARAM=1 USE_SYSTEMD=1 USE_THREAD=1

正如您所见,我故意省略了 lua5 选项,这是与您从 apt-get install 获得的选项唯一的区别。

生成的二进制文件运行良好,没有任何问题

相关内容