有问题nginx
。它在客户端完成下载之前关闭连接。它看起来像:
$ 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]
这就是这张图片在浏览器中无法完全显示的原因。我只能看到它的头部。
Nginx 配置为前端,apache 配置为后端。直接链接到 apache 运行良好,因此 nginx 存在问题。我说得对吗?
nginx配置:
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;
}
}
我应该从哪里着手解决这个问题?
答案1
我忘了检查最重要的事情/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/*
),现在一切正常。感谢大家的帮助。
答案2
答案3
另一件需要检查的非常重要的事情是:确保还有剩余的磁盘空间!
对我来说,情况如下:
[user@server]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 30G 29G 0 100% /
对我来说,nginx 无法写入磁盘,最终导致同样的问题!希望它能帮助到别人!
答案4
检查lingering_timenginx.conf 中的值。默认情况下,该值设置为 30 秒。因此,nginx 将最多等待 30 秒,让客户端发送数据。
如果您正在上传或 POST 一个文件,这可能需要超过 30 秒才能完成,那么如果上传时间超过 30 秒,nginx 服务器将通过向客户端发送 RST 数据包来重置与客户端的连接。
为了让nginx等待更多的时间来监听客户端数据,则将该值设置为更高的值。
有关 lingering_time 的详细信息,请参见此处lingering_time