带有上游的nginx有时会延迟1分钟



内部系统

硬件:Xeon E-2236 x 32GB x 1TB SSD(,带4台服务器。仅适用于负载平衡性能x 2ea、db CRUD

软件:centos 7,nginx 1.18,node v12.22.1

当外部连接到服务器时,负载平衡服务器发送到反向代理(性能服务器(并进行计算。计算完成后,发送到数据库服务器

这项工作需要低性能,因此CPU使用率始终为0~2%,RAM使用率为3~7%,IO WAIT为0%

问题是

当外部请求到达加载服务器时,请求被随机延迟完全延迟1分钟并发送到反向代理服务器。当请求延迟1分钟时,重新启动负载服务器的nginx(systemctl-restart nginx(立即完成请求,没有任何错误。它处理得很好。

神秘的是,这个问题完美地延迟了1分钟(花费1分钟0.02s~1分钟0.1s(。当1分钟后,它似乎是正常的(在50ms的服务器时间内响应(,但当来自同一设备的请求时,每5分钟延迟1分钟

但是外部http连接的完美副本x5000个请求使用curl、将其从加载服务器发送到加载服务器

加载服务器发送到执行服务器和执行服务器到数据库服务器的花费低于平均50ms检查所有nginx到反向代理端口和响应,也低于

50ms在nuxt服务器

api服务器load-nginx.conf:

#user  nobody;
worker_processes  auto;

error_log  logs/error.log;
events {
use epoll;
worker_connections  4096;
multi_accept   off;
}

http {
client_max_body_size 300M;
include       mime.types;
default_type  application/octet-stream;
sendfile        on;
tcp_nopush on;
tcp_nodelay on;
#keepalive_timeout  0;
keepalive_timeout  35;
reset_timedout_connection on;
send_timeout 15;

upstream nuxtserver-ssl {
ip_hash;
server 10.10.10.21:500;
server 10.10.10.22:500;
}
upstream apiserver-ssl {
server 10.10.10.21:465;
server 10.10.10.22:465;
server 10.10.10.21:466;
server 10.10.10.22:466;
server 10.10.10.21:467;
server 10.10.10.22:467;
}
# HTTPS server
#
server {
include /usr/local/nginx/conf/ipdeny.conf;
listen       443 ssl;
server_name  subdomain.example.com;
ssl_certificate      /usr/local/nginx/ssl/__example_com.crt;
ssl_certificate_key  /usr/local/nginx/ssl/__example_com.key;
ssl_session_cache    shared:SSL:1m;
ssl_session_timeout  5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers  HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers  on;
access_log /usr/local/nginx/logs/ssl-access.log combined;
error_log /usr/local/nginx/logs/ssl-error.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://nuxtserver-ssl;
}
location /api/ {
proxy_set_header Upgrade $http_upgrade;
proxy_http_version 1.1;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
proxy_cache_bypass $http_upgrade;
proxy_pass http://apiserver-ssl;
proxy_connect_timeout 3;
proxy_buffering off;
}
}

我不知道这是OP的问题,但我在docker群中遇到了类似的问题,这些问题都与IPV6支持有关。

我的方法是确保我始终代理IPV4地址,而不是让它成为偶然。

与localhost:相关

server {
...
location / {
# This would occasionally take 1 minute:
# proxy_pass  http://localhost:8000;
# This is always quick:
proxy_pass  http://127.0.0.1:8000;
}
}

与docker内部DNS查询相关:

server {
...
# This would occasionally take 1 minute:
# resolver 127.0.0.11 valid=30s;
# This is always quick:
resolver 127.0.0.11 valid=30s ipv6=off;
location / {
set $target myproject-web;
proxy_pass  http://$target:8000;
}
}

最新更新