我们要评估的设置非常简单 - 一台机器上安装 NginX(目前为 1vCPU、2GB RAM),两台独立机器上安装两个后端 Tomcat。核心配置如下:
worker_processes 1;
events {
worker_connections 2048;
use epoll;
# multi_accept on;
}
http {
# define load-balancing upstream
upstream tomcatUpstream {
ip_hash;
server 192.168.xx.51:8080;
server 192.168.xx.52:8080;
}
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 0; # 45;
# keepalive_requests 4096;
reset_timedout_connection on;
client_body_timeout 30;
send_timeout 15;
}
我们尝试ab -c10 -n20
同时从 3 台不同的机器(3 个不同的公共 IP - 2 个不同的城市,3 个不同的 ISP,尽管在同一个国家/地区)运行。
无论我在配置中更改或尝试什么(epoll yes/no、multi_accept on/off、keep-alive 0 / !=0、重新启动、删除var/cache/nginx……),只有一个后端 Tomcat 被命中,并且始终是上游列表中按顺序排列的第一个,因为我也尝试更改顺序。
更详细的信息如下:这两个 Tomcat 提供动态生成的二进制文件(每个请求一个二进制文件,大小为 60 - 200KB),响应时间不是很快。
禁用时ip_hash
,请求将分布在两个后端。所以,我们的测试或 NginX 配置一定有问题……?