技术解析
结构: nginx1<->nginx2<->backend server
nginx1 、 nginx2 、 backend server 都不在内网,在公网上,并且全部启用 gzip 。
nginx1 和 nginx2 的配置一样,区别只是 nginx1 的 upstream 是 nginx2 , nginx2 的 upstream 是 backend server ,这是配置:
worker_processes 1;
error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid;
worker_rlimit_nofile 1024;
events {
worker_connections 1024;
}
ht国外服务器tp {
include /etc/nginx/mime.types; default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
keepalive_timeout 120;
gzip on;
gzip_types application/json text/plain application/x-javascript application/javascript text/javascript text/css application/xml text/xml;
gzip_min_length 1k;
server_tokens off;
upstream backend{
server xxx.xxx.xxx.xxx;
keepalive 120;
}
proxy_temp_path /tmp/cache_tmp;
proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache1:100m inactive=20m max_size=5g;
server{
listen 80;
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_set_header Connection "";
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Accept-Encoding "gzip";
proxy_cache cache1;
proxy_cache_key $uri$is_args$args;
proxy_cache_revalidate on;
}
}
}
现在的问题是, nginx1 的入流量远大于出流量, 3 倍左右,正常来说,在没设置 proxy_cache 的情况下,出入流量应该一致,在设置了 proxy_cache 后应该出流量大于入流量,已开始怀疑是不是 nginx2 的响应没有 gzip ,但在 nginx1 上抓包,来自 nginx2 的响应确实是 gzip 的,所以为什么流量不平衡?
在 nginx2 上,则是出大于入,但只多出了一点点,很少。
服务器上除了nginx没有其他任何服务,在nginx1上通过iftop查看可以看到接收nginx2的流量比较大,但是出到客户端的流量都比较低。