nginx fecha a conexão em algumas fotos

7

Existe um problema com nginx . Fecha a conexão antes que o cliente termine o download. Parece:

 $ 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]

ao mesmo tempo, com imagens menores, tudo está ok:

 $ 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]

Esta é a razão pela qual esta imagem não pode ser desenhada totalmente no navegador. Eu posso ver apenas a cabeça dele.

O Nginx é configurado como front-end e o apache como back-end. O link direto para o apache funciona bem, então existe um problema no nginx. Estou certo?

configuração 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;
            }
    }

onde devo cavar para corrigir esse problema?

    
por rush 11.07.2012 / 20:52

4 respostas

8

A principal coisa que esqueci é verificar /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"

Por isso, fixei /var/lib/nginx/proxy/* permissões de diretórios ( sudo chown -R www-data:www-data /var/lib/nginx/proxy/* ) e agora tudo funciona bem. Obrigado a todos pela ajuda.

    
por 12.07.2012 / 06:53
1

Um possível motivo para o fechamento da conexão é uma conexão lenta e um curto keepalive_timeout . O valor padrão para o keepalive_timeout é 75s. Se for muito curto e a conexão estiver lenta, pode ser fechado muito cedo.

http {
    ..
    keepalive_timeout 75;
}

Um dos motivos pelos quais o download da sua imagem pode ser lento é o seu aplicativo. Se você estiver usando um aplicativo Ruby-on-Rails com um Gasoduto de ativos em combinação com o Nginx, o download da imagem poderá ser lento porque você está usando os URLs de imagem incorretos (sem impressão digital gerada pelo pipeline de ativos). Os helpers do Rails asset_path e image_tag geram os URLs corretos dos arquivos com impressão digital, que podem ser baixados rapidamente.

    
por 26.07.2013 / 14:05
1

Outra coisa muito importante a verificar é: certifique-se de que ainda tem espaço em disco!

Para mim, foi como seguir:

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

Para mim, o nginx não conseguiu gravar no disco causando o mesmo problema! Espero que ajude alguém!

    
por 22.11.2014 / 09:44
0

Sua taxa de download é incrivelmente baixa. (2,74 KB / s!). Você obtém o mesmo resultado ao executar o wget na mesma máquina em que o Nginx está localizado? Pode ser que o Nginx esteja reagindo razoavelmente a uma solicitação por meio de um link muito lento.

Caso contrário, recomendo explorar as várias diretrizes de tempo em os documentos do Nginx . Pesquise todas as menções de "timeout" na página e veja se você acha que é uma boa correspondência. Por exemplo, você pode ver que está expirando no que parece ser intervalos de 10 segundos, portanto, qualquer tempo de espera de cerca de 10 segundos deve receber um exame extra.

Por exemplo, a diretiva lingering_timeout é padronizada para 10 segundos, portanto, você pode verificar isso.

Você também deve investigar por que a conexão com seu cliente é aparentemente tão lenta.

Outra ideia: experimente um cliente alternativo, como curl , e veja se obtém o mesmo resultado de wget . Se curl funcionar bem, você deve suspeitar que há algo estranho sobre wget fazer a solicitação.

    
por 11.07.2012 / 22:12