nginxclosures了一些图片的连接

nginx有问题。 它在客户端完成下载之前closures连接。 看起来像:

  $ wget -O /dev/null http://www.site.com/images/theme/front/clean.jpg --2012-07-11 21:37:03-- http://www.site.com/images/theme/front/clean.jpg Resolving www.site.com (www.site.com)... 123.234.123.234 Connecting to www.site.com (www.site.com)|123.234.123.234|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 90707 (89K) [image/jpeg] Saving to: `/dev/null' 26% [===============> ] 24,291 --.-K/s in 8.7s 2012-07-11 21:37:12 (2.74 KB/s) - Connection closed at byte 24291. Retrying. --2012-07-11 21:37:13-- (try: 2) http://www.site.com/images/theme/front/clean.jpg Connecting to www.site.com (www.site.com)|123.234.123.234|:80... connected. HTTP request sent, awaiting response... 206 Partial Content Length: 90707 (89K), 66416 (65K) remaining [image/jpeg] Saving to: `/dev/null' 53% [+++++++++++++++============> ] 48,555 --.-K/s in 8.7s 2012-07-11 21:37:23 (2.74 KB/s) - Connection closed at byte 48555. Retrying. --2012-07-11 21:37:25-- (try: 3) http://www.site.com/images/theme/front/clean.jpg Connecting to www.site.com (www.site.com)|123.234.123.234|:80... connected. HTTP request sent, awaiting response... 206 Partial Content Length: 90707 (89K), 42152 (41K) remaining [image/jpeg] Saving to: `/dev/null' 100%[+++++++++++++++++++++++++++========>] 90,707 --.-K/s in 0.1s 2012-07-11 21:37:25 (311 KB/s) - `/dev/null' saved [90707/90707] 

同时小图像一切都好:

  $ wget -O /dev/null http://www.site.com/images/theme/front/grease.jpg --2012-07-11 21:41:28-- http://www.site.com/images/theme/front/grease.jpg Resolving www.site.com (www.site.com)... 123.234.123.234 Connecting to www.site.com (www.site.com)|123.234.123.234|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 21404 (21K) [image/jpeg] Saving to: `/dev/null' 100%[====================================>] 21,404 --.-K/s in 0.07s 2012-07-11 21:41:29 (316 KB/s) - `/dev/null' saved [21404/21404] 

这就是为什么这张图片不能在浏览器中完全绘制大小的原因。 我只能看到它的头。

Nginxconfiguration为前端,Apache作为后端。 直接链接到Apache运行良好,所以在Nginx中有问题。 我对吗?

nginxconfiguration:

 user satellite; worker_processes 1; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; multi_accept on; } http { include /etc/nginx/mime.types; access_log /var/log/nginx/access.log; sendfile on; keepalive_timeout 0; tcp_nodelay on; gzip on; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; client_max_body_size 100m; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; server { listen 123.234.123.234:80; server_name site.com www.site.com; location ~* ^/(admin/|dump/|webmail/|myadmin/|webim/) { proxy_pass http://123.234.123.234:8080; proxy_redirect http://site.com:8080/ /; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; } location / { proxy_pass http://123.234.123.234:8080; proxy_redirect http://site.com:8080/ /; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_cache ino; proxy_cache_valid 12h; proxy_hide_header "Set-Cookie"; proxy_ignore_headers "Cache-Control" "Expires"; } location ~* ^.+\.(jpg|swf|flv|ico|txt|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar)$ { access_log /home/satellite/logs/site.com.nginx.access.log; error_page 404 = @fallback; if ( $host ~* ^((.*).site.com)$ ) { set $proot /home/satellite/www/$1; break; } if ( $host = "www.site.com" ) { break; } if ( $host = "site.com" ) { break; } root /home/satellite/www/site.com; } location @fallback { proxy_pass http://123.234.123.234:8080; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; } } 

我应该在哪里解决这个问题?

我忘记的主要事情是检查/var/log/nginx/error.log

 2012/07/12 08:46:44 [crit] 24074#0: *3 open() "/var/lib/nginx/proxy/1/00/0000000001" failed (13: Permission denied) while reading upstream, client: 109.173.96.30, server: site.com, request: "GET /images/theme/front/clean.jpg HTTP/1.1", upstream: "http://123.234.123.234:8080/images/theme/front/clean.jpg", host: "www.site.com", referrer: "http://www.google.com" 

所以我修正了/var/lib/nginx/proxy/*目录权限( sudo chown -R www-data:www-data /var/lib/nginx/proxy/* ),现在一切正常。 感谢大家的帮助。

closures连接的一个可能的原因是一个缓慢的连接和一个短的keepalive_timeoutkeepalive_timeout的默认值是75秒。 如果太短,连接速度慢,可能太早closures。

 http { .. keepalive_timeout 75; } 

你的图像下载速度慢的一个原因是你的应用程序。 如果您将Ruby-on-Rails应用程序的资产pipe道与Nginx结合使用,则图像下载可能会比较慢,因为您使用了错误的图像URL(没有通过资产pipe道生成指纹)。 Rails助手asset_path和image_tag生成带有指纹的正确的URL格式文件,可以快速下载。

另一个非常重要的事情是:确保你有剩余的磁盘空间!

对我来说,就像下面这样:

 [user@server]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 30G 29G 0 100% / 

对我来说,nginx最终无法写入磁盘引起同样的问题! 希望它可以帮助别人!

你的下载速度非常低。 (2.74 KB / s!)。 在Nginx所在的机器上运行wget时,你会得到相同的结果吗? 这可能是Nginx正在通过非常缓慢的链接合理地对请求作出反应。

否则,我build议在Nginx文档中探索各种时间指令。 在页面上search每一个“超时”,看看你是否find了一个很好的匹配。 例如,你可以看到你的时间间隔是10秒钟,所以任何超过10秒钟的时间都会受到额外的审查。

例如, lingering_timeout指令默认为10秒,所以你可以检查。

你也应该看看为什么与你的客户的连接显然是如此缓慢。

另一个想法:尝试一个备用客户端,如curl ,并看到你得到的结果与你使用wget 。 如果curl工作的很好,你应该怀疑wget提出这个请求有什么奇怪的地方。