에 문제가 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는 프론트 엔드로 구성되고 아파치는 백엔드로 구성됩니다. 아파치에 대한 직접 링크가 잘 작동하므로 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;
}
}
이 문제를 해결하기 위해 어디서 파야합니까?
답변
내가 잊어 버린 가장 중요한 것은 확인하는 것 /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/*
)을 고쳤으며 이제는 모든 것이 잘 작동합니다. 도움을 주셔서 감사합니다.
답변
연결을 닫을 수있는 가능한 이유는 연결이 느리고 연결이 짧기 때문 keepalive_timeout
입니다. 기본값 에 대한이 keepalive_timeout
75S입니다. 너무 짧고 연결이 느리면 너무 일찍 닫힐 수 있습니다.
http {
..
keepalive_timeout 75;
}
이미지 다운로드 속도가 느린 이유 중 하나는 응용 프로그램입니다. Nginx와 함께 Asset Pipeline 과 함께 Ruby-on-Rails 애플리케이션을 사용하는 경우 자산 파이프 라인 에서 생성 된 지문이없는 잘못된 이미지 URL을 사용하여 이미지 다운로드가 느려질 수 있습니다. 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가 매우 느린 링크를 통한 요청에 합리적으로 반응하고있을 수 있습니다.
그렇지 않으면 Nginx docs 에서 다양한 시간 지시문을 탐색하는 것이 좋습니다 . 페이지에서 “timeout”에 대한 모든 언급을 검색하고 일치하는지 확인하십시오. 예를 들어, 10 초 간격으로 시간이 초과되는 것을 볼 수 있으므로 약 10 초의 시간 초과는 추가 검사를 받아야합니다.
예를 들어, lingering_timeout 지시문의 기본값은 10 초이므로 확인할 수 있습니다.
또한 클라이언트와의 연결이 왜 그렇게 느린 지 조사해야합니다.
또 다른 아이디어 :과 같은 대체 클라이언트를 사용해 보시고 curl
동일한 결과를 얻으십시오 wget
. 제대로 curl
작동 wget
하면 요청하는 것이 이상한 것 같습니다 .
답변
nginx.conf 에서 lingering_time 값을 확인하십시오 . 기본적으로 30 초로 설정됩니다. 따라서 nginx는 클라이언트가 데이터를 보낼 때까지 최대 30 초 동안 대기합니다.
완료하는 데 30 초 이상 걸릴 수있는 파일의 업로드 또는 POST를 수행하는 경우 업로드 시간이 30 초를 초과하면 nginx 서버는 클라이언트에 RST 패킷을 전송하여 클라이언트에 대한 연결을 재설정합니다.
nginx가 클라이언트 데이터를 청취하기 위해 더 많은 시간을 기다리려면이 값을 더 높은 값으로 설정하십시오.
lingering_time에 대한 자세한 정보는 여기를 참조하십시오. lingering_time