Nginx升级后导致文件下载不完整或僵死的解决
2012-05-29 21:26:27 来源:我爱运维网 评论:0 点击:
在升级了两台应用服务器的NGINX后,发现通过远程客户机从nginx用http下载数据时,下载到131KB或某个定长尺寸时必然停住,无法下载后面的数...
在升级了两台应用服务器的NGINX后,发现通过远程客户机从nginx用http下载数据时,下载到131KB或某个定长尺寸时必然停住,无法下载后面的数据。
如:
wget http://www.5iops.com/test/kk.mp4
首先,看看服务器上面是否有这个内核参数:net.ipv4.tcp_timestamps = 0
必须加上,防止在NAT的网络情况下导致TCP无法建立.确认该内核参数已设定;
其次,可以通过linux客户端上的strace看看下载挂在什么地方:
如:
strace wget http://www.5iops.com/test/kk.mp4
发现是停住的地方都是timeout,说明与客户端网络无关;
查看服务器端操作系统版本,NGINX安装配置,查看NGINX错误日志等.升级的NGINX运行指定用户为www,主进程为root用户.原NGINX运行未指定用户.对比能下载与不能下载的NGINX文件目录及权限.最终发现是NGNIX临时目录权限问题导致:
安装时,由于原来服务器上已存在nginx(简称oldngx)运行,正常有服务时,service nginx stop并不能完全关闭所有正在连接运行的进程,导致新安装的nginx(简称newngx)目录下temp由oldngx进程写入,则该temp目录权限仍然是旧的运行用户。这样newngx新用户并不能写入这些temp目录。而temp目录在网速较慢的情况下或客户端下载body超过默认大小时会使用。Temp目录与以下2个参数有关:
client_body_buffer_size
含义:指定用户请求体所使用的buffer的最大值
语法:client_body_buffer_size <size>
缺省:两个page的大小,一般为8k或16k
作用域:http.server.location
示例:client_body_buffer_size 512k;
注意:如果用户请求体超过了buffer的大小,则将全部内容或部分内容存储到一个临时文件中。
client_body_temp_path
含义:设置存储用户请求体的文件的目录路径
语法:client_body_temp_path <directory path> [level1 | level2 | level3]
作用域:http.server.location
示例:client_body_temp_path /spool/nginx/client_temp 1 2;
除此之后,NGINX依据模块的不同,还有多个temp目录,如proxy_temp,fastcgi_temp等,均需要注意权限设定及配置.与PHP-FPM结合时,还要注意phpfpm指定用户需要与nginx运行用户相同.
解决办法:在安装新的nginx时,务必确保旧nginx进程全部关闭。建议在service nginx stop之后,再pkill nginx,并确保ps –ef|grep nginx|grep –v grep|wc –l 为0.这样临时目录会自动正确创建.
如:
wget http://www.5iops.com/test/kk.mp4
首先,看看服务器上面是否有这个内核参数:net.ipv4.tcp_timestamps = 0
必须加上,防止在NAT的网络情况下导致TCP无法建立.确认该内核参数已设定;
其次,可以通过linux客户端上的strace看看下载挂在什么地方:
如:
strace wget http://www.5iops.com/test/kk.mp4
发现是停住的地方都是timeout,说明与客户端网络无关;
查看服务器端操作系统版本,NGINX安装配置,查看NGINX错误日志等.升级的NGINX运行指定用户为www,主进程为root用户.原NGINX运行未指定用户.对比能下载与不能下载的NGINX文件目录及权限.最终发现是NGNIX临时目录权限问题导致:
安装时,由于原来服务器上已存在nginx(简称oldngx)运行,正常有服务时,service nginx stop并不能完全关闭所有正在连接运行的进程,导致新安装的nginx(简称newngx)目录下temp由oldngx进程写入,则该temp目录权限仍然是旧的运行用户。这样newngx新用户并不能写入这些temp目录。而temp目录在网速较慢的情况下或客户端下载body超过默认大小时会使用。Temp目录与以下2个参数有关:
client_body_buffer_size
含义:指定用户请求体所使用的buffer的最大值
语法:client_body_buffer_size <size>
缺省:两个page的大小,一般为8k或16k
作用域:http.server.location
示例:client_body_buffer_size 512k;
注意:如果用户请求体超过了buffer的大小,则将全部内容或部分内容存储到一个临时文件中。
client_body_temp_path
含义:设置存储用户请求体的文件的目录路径
语法:client_body_temp_path <directory path> [level1 | level2 | level3]
作用域:http.server.location
示例:client_body_temp_path /spool/nginx/client_temp 1 2;
除此之后,NGINX依据模块的不同,还有多个temp目录,如proxy_temp,fastcgi_temp等,均需要注意权限设定及配置.与PHP-FPM结合时,还要注意phpfpm指定用户需要与nginx运行用户相同.
解决办法:在安装新的nginx时,务必确保旧nginx进程全部关闭。建议在service nginx stop之后,再pkill nginx,并确保ps –ef|grep nginx|grep –v grep|wc –l 为0.这样临时目录会自动正确创建.
上一篇:Linux下系统或服务排障的最佳实践
下一篇:YUM源更新问题的解决
分享到:
收藏
评论排行
- ·Windows(Win7)下用Xming...(92)
- ·使用jmx client监控activemq(20)
- ·Hive查询OOM分析(14)
- ·复杂网络架构导致的诡异...(8)
- ·使用 OpenStack 实现云...(7)
- ·影响Java EE性能的十大问题(6)
- ·云计算平台管理的三大利...(6)
- ·Mysql数据库复制延时分析(5)
- ·OpenStack Nova开发与测...(4)
- ·LTPP一键安装包1.2 发布(4)
- ·Linux下系统或服务排障的...(4)
- ·PHP发布5.4.4 和 5.3.1...(4)
- ·RSYSLOG搭建集中日志管理服务(4)
- ·转换程序源码的编码格式[...(3)
- ·Linux 的木马程式 Wirenet 出现(3)
- ·Nginx 发布1.2.1稳定版...(3)
- ·zend framework文件读取漏洞分析(3)
- ·Percona Playback 0.3 development release(3)
- ·运维业务与CMDB集成关系一例(3)
- ·应该知道的Linux技巧(3)