Nginx单浏览器/会话仅允许单个连接的问题求助
Nginx单浏览器/会话仅允许单个连接的问题求助
大家好,我刚接触Nginx,现在用它搭配Flask+uWSGI来部署网页和文件服务,遇到了一个挺奇怪的问题,想请教各位大佬:
当我的浏览器在下载文件时,同一个浏览器里的其他标签页不管访问哪个页面或者文件,都会一直处于加载状态,只有等文件下载完成后才会开始处理这些请求。我一开始怀疑是Nginx按IP限制了连接数,试着配置了limit_conn但完全没效果。
后来我用同一台机器上的另一个浏览器测试,发现它在文件下载过程中居然能正常访问站点;用另一台机器访问也没问题。所以我觉得这应该和worker进程数、全局连接限制这些配置无关,但实在摸不清问题出在哪,希望有人能给点指导!
下面是我的Nginx配置,基本都是默认设置:
nginx.conf
worker_processes auto; #worker_processes 4; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; # multi_accept on; } http { #limit_conn_zone $binary_remote_addr zone=addr:10m; #limit_conn_zone $server_name zone=serv:10m; ## # Basic Settings ## sendfile on; tcp_nopush on; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # SSL Settings ## ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/x-windows-metafont image/svg+xml application/x-font-ttf font/opentype application/vnd.ms-fontobject text/x-component; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
站点配置
server { listen 80; server_name (domain) www.(domain); location / { include uwsgi_params; uwsgi_pass unix:/home/(user)/(domain)/(domain).sock; } }
可能的排查方向(供参考)
- 检查uWSGI配置:看看uWSGI的worker进程数、线程数是不是设得太少(比如只有1个)。如果uWSGI同一时间只能处理一个请求,同浏览器会话的请求可能会被阻塞排队,而不同浏览器/机器的请求可能会建立新连接,从而绕过这个限制。
- Nginx长连接配置:确认
keepalive_timeout、keepalive_requests这些参数,同一会话的请求如果复用了同一个长连接,而文件下载请求占用了这个连接的话,后续请求就只能等待。可以尝试调整这些参数,或者关闭长连接测试。 - 静态文件直接由Nginx处理:如果下载的是静态文件,不要通过uWSGI转发,单独配置一个
location用root或alias指向文件目录,让Nginx直接响应,这样不会占用uWSGI的处理资源,也能避免阻塞其他请求。 - 浏览器并发限制:虽然一般浏览器对同一域名有并发请求数限制(比如Chrome默认6个),但你遇到的是完全阻塞,大概率不是这个原因,但可以多开几个下载测试下,排除这个可能。
备注:内容来源于stack exchange,提问作者parsley3392
相关产品推荐
相关产品推荐

