- 论坛徽章:
- 2
|
环境如下:
主机A:使用Nginx搭建的文件服务器,有些文件很大,有100G。
主机B:使用Nginx搭建的反向代理服务器,带缓存,源指向主机A。同时作为下载client,使用curl命令下载文件。
假设缓存文件已经存在,这样数据拷贝只是主机B-->主机B。
问题如下:
当主机B使用curl从本地下载100G大小的文件时,下了几个G就停止了,报错(curl 10G以内的文件一般不会报错):
curl: (1 transfer closed with 103333150720 bytes remaining to read。
这个时候主机B的Nginx配置文件中sendfile=on,tcp_nopush=on,tcp_nodelay=on。
当关闭了sendfile时(sendfile=off),再次从主机B curl 100G的文件,98%是成功的。
但是当有并发时(一次curl 10个100G的文件),当一个nginx进程处理两个以上curl请求时,只有一个curl请求可以正常下载,同一进程处理的其他curl请求会出现上述问题。
请论坛中高手帮忙分析一下,先谢过!
我的配置文件如下,主机A的就不贴了(正常配置):
sendfile打开时:
nginx.conf:- worker_processes 8;
- error_log logs/error.log;
- error_log logs/error.log notice;
- error_log logs/error.log info;
- #pid logs/nginx.pid;
- events {
- use epoll;
- worker_connections 1024;
- }
- http {
- include mime.types;
- include proxy.conf;
- include mysvrhost.conf;
- default_type application/octet-stream;
- sendfile on;
- server_names_hash_bucket_size 128; #增加
- client_header_buffer_size 32k; #增加
- large_client_header_buffers 4 32k; #增加
- client_max_body_size 300g; #增加
- tcp_nopush on; #修改为on
- keepalive_timeout 35; #修改为65
- tcp_nodelay on; #增加
- server_tokens off; #增加,不显示nginx版本信息
- server {
- listen 8023;
- server_name localhost;
- location /{
- proxy_pass http://mynginx;
- proxy_cache_key $host$uri$is_args$args; #增加设置web缓存的key值,nginx根据key值md5哈希存储缓存
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-For $remote_addr;
- #proxy_set_header Accept-Encoding 'gzip';
- proxy_cache_valid 200 304 1000d;
- expires 1000d;
- }
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root html;
- }
- }
- }
复制代码 proxy.conf:- proxy_temp_path /opt/nginx/proxy_temp_dir;
- proxy_cache_path /opt/nginx/proxy_cache_dir levels=1:2 keys_zone=mycache:512m inactive=100d max_size=1000g;
- #设置Web缓存区名称为cache_one,内存缓存为50MB,自动清除1天内没有被访问的文件,硬盘缓存为1GB。
- client_body_buffer_size 512k; #增加缓冲区代理缓冲客户端请求的最大字节数
- proxy_connect_timeout 60; #增加连接后端服务器超时时间
- proxy_read_timeout 60; #增加后端服务器响应请求超时时间
- proxy_send_timeout 60; #增加后端服务器发送数据超时时间
- proxy_buffer_size 32k; #增加代理请求缓存区大小
- proxy_buffers 4 64k; #增加
- proxy_busy_buffers_size 128k; #增加系统繁忙时可申请的proxy_buffers大小
- proxy_temp_file_write_size 128k; #增加proxy缓存临时文件的大小
- proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; #增加故障转移,如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
- proxy_cache mycache; #增加使用web缓存区cache_one
复制代码 sendfile关闭时,只是把nginx.conf中的sendfile=on改成sendfile=off,其他的没有变化。
|
|