现象:
数据量过多的时候,HTTP请求大概30秒后会报错
<html>
<body>
<h1>504 Gateway Time-out</h1>
The server didn't respond in time.
</body>
</html>
解决思路
分析访问链路:
客户端发起请求 -> Haproxy -> Route -> Service -> Pod(nginx)
1.修改haproxy配置
在 HAProxy 配置文件(例如 /etc/haproxy/haproxy.cfg)的前端和后端部分添加或修改以下内容:
从
cfg
defaults
mode http
log global
option dontlognull
option http-server-close
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
改成
cfg
defaults
mode http
log global
option dontlognull
option http-server-close
option redispatch
retries 3
timeout http-request 300s
timeout queue 300s
timeout connect 300s
timeout client 300s
timeout server 300s
timeout http-keep-alive 300s
timeout check 300s
maxconn 3000
配置完成后重启 HAProxy:
bash
sudo systemctl restart haproxy
2.修改路由超时时间
bash
oc annotate route <route-name> haproxy.router.openshift.io/timeout=<timeout-value>,如 300s
或者在route yaml加入
yaml
annotations:
haproxy.router.openshift.io/timeout: 600s
3.修改nginx配置
在 Nginx 配置文件(例如 /etc/nginx/nginx.conf 或特定站点配置文件)中添加或修改以下内容:
conf
http {
server {
...
location / {
keepalive_timeout 300;
fastcgi_connect_timeout 300;
#fastcgi连接超时时间,默认60秒
fastcgi_send_timeout 300;
#nginx 进程向 fastcgi 进程发送请求过程的超时时间,默认值60秒
fastcgi_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
send_timeout 300;
}
}
}
配置完成后重启 Nginx:
bash
sudo systemctl restart nginx
在此验证,发现问题已经解决!!!