Há um problema com nginx
. Fecha a conexão antes que o cliente termine o download. Parece que:
$ 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á bem:
$ 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 totalmente desenhada no navegador. Eu posso ver apenas a cabeça disso.
O Nginx está configurado como front-end e apache como back-end. O link direto para o apache funciona bem, então há 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?
nginx
web-server
pressa
fonte
fonte
sendfile
?Respostas:
A principal coisa que esqueci é verificar
/var/log/nginx/error.log
.Então, eu 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 muito bem. Agradeço a todos pela ajuda.fonte
Uma possível razão para o fechamento da conexão é uma conexão lenta e uma curta
keepalive_timeout
. O valor padrão para okeepalive_timeout
é 75s. Se for muito curto e a conexão estiver lenta, poderá ser fechada muito cedo.Uma razão pela qual o download da sua imagem pode ser lento é o seu aplicativo. Se você estiver usando um aplicativo Ruby-on-Rails com um Asset Pipeline em combinação com o Nginx, o download da imagem poderá ser lento porque você estiver usando os URLs de imagem incorretos (sem impressão digital gerada pelo pipeline do ativo). Os ajudantes do Rails asset_path e image_tag geram os arquivos de formulário de URLs certos com impressão digital, que podem ser baixados rapidamente.
fonte
Outra coisa muito importante a verificar é: Verifique se você tem espaço em disco restante!
Para mim foi como se segue:
Para mim, o nginx não conseguiu gravar no disco, causando o mesmo problema! Espero que ajude alguém!
fonte
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 um link muito lento.
Caso contrário, recomendo explorar as várias diretrizes de tempo nos documentos do Nginx . Pesquise todas as menções a "tempo limite" na página e veja se você acha que é uma boa correspondência. Por exemplo, você pode ver que está atingindo o tempo limite em intervalos de 10 segundos, portanto, qualquer tempo limite de 10 segundos deve receber um exame adicional.
Por exemplo, a diretiva lingering_timeout é padronizada para 10 segundos, portanto você pode verificar isso.
Você também deve analisar por que a conexão com o seu cliente é aparentemente tão lenta.
Outra idéia: tente um cliente alternativo, como
curl
, e veja se você obtém o mesmo resultado que obtémwget
. Securl
funcionar bem, você deve suspeitar que há algo estranho emwget
fazer a solicitação.fonte
Verifique o valor de lingering_time no nginx.conf. Por padrão, será definido como 30seg. Portanto, o que isso fará é que o nginx esperará no máximo 30 segundos para o cliente enviar dados.
Se você estiver fazendo um upload ou POST de um arquivo que pode levar mais de 30 segundos para ser concluído, o servidor nginx redefinirá a conexão com o cliente enviando um pacote RST ao cliente se o tempo de upload exceder 30 segundos.
Para que o nginx aguarde mais tempo para ouvir os dados do cliente, defina esse valor para um valor mais alto.
Para informações detalhadas sobre lingering_time, veja aqui lingering_time
fonte