Hay un problema en esta nginx
. Cierra la conexión antes de que el cliente finalice la descarga. 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]
al mismo tiempo con imágenes más pequeñas, todo está bien:
$ 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 es la razón por la cual esta imagen no se puede dibujar a tamaño completo en el navegador. Solo puedo ver la cabeza.
Nginx está configurado como front-end y apache como back-end. El enlace directo a apache funciona bien, por lo que hay un problema en nginx. Estoy en lo cierto?
nginx config:
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;
}
}
¿Dónde debo cavar para solucionar este problema?
nginx
web-server
prisa
fuente
fuente
sendfile
?Respuestas:
Lo principal que olvidé es verificar
/var/log/nginx/error.log
.Así que arreglé los
/var/lib/nginx/proxy/*
permisos de directorios (sudo chown -R www-data:www-data /var/lib/nginx/proxy/*
) y ahora todo funciona muy bien. Gracias a todos por la ayuda.fuente
Una posible razón para el cierre de la conexión es una conexión lenta y corta
keepalive_timeout
. El valor predeterminado para elkeepalive_timeout
es 75s. Si es demasiado corto y la conexión es lenta, entonces podría cerrarse demasiado pronto.Una razón por la cual la descarga de su imagen podría ser lenta es su aplicación. Si está utilizando una aplicación Ruby-on-Rails con una canalización de activos en combinación con Nginx, entonces la descarga de la imagen podría ser lenta porque está utilizando las URL de imagen incorrectas (sin huella digital generada por la canalización de activos). Los ayudantes de Rails asset_path y image_tag generan los archivos de formulario de URL correctos con huella digital que se pueden descargar rápidamente.
fuente
Otra cosa muy importante para verificar es: ¡Asegúrese de que le quede espacio en el disco!
Para mí fue como lo siguiente:
¡Para mí, nginx no pudo escribir en el disco y finalmente causó el mismo problema! Espero que ayude a alguien!
fuente
Su velocidad de descarga es increíblemente baja. (2.74 KB / s!) ¿Obtiene el mismo resultado cuando ejecuta wget en la misma máquina donde se encuentra Nginx? Podría ser que Nginx esté reaccionando razonablemente a una solicitud a través de un enlace muy lento.
De lo contrario, recomiendo explorar las diversas directivas de tiempo en los documentos de Nginx . Busque cada mención de "tiempo de espera" en la página y vea si encuentra que es una buena coincidencia. Por ejemplo, puede ver que está agotando el tiempo en lo que parecen ser intervalos de 10 segundos, por lo que cualquier tiempo de espera de unos 10 segundos debería recibir un escrutinio adicional.
Por ejemplo, la directiva lingering_timeout está predeterminada en 10 segundos, por lo que puede verificar eso.
También debe investigar por qué la conexión con su cliente es aparentemente tan lenta.
Otra idea: pruebe con un cliente alternativo, como
curl
, y vea que obtiene el mismo resultado que conwget
. Sicurl
funciona bien, debe sospechar que hay algo extraño enwget
hacer la solicitud.fuente
Compruebe el lingering_time valor en nginx.conf. Esto se establecerá por defecto en 30 segundos. Entonces, lo que esto hará es que nginx esperará un máximo de 30 segundos para que el cliente envíe datos.
Si está realizando una carga o POST de un archivo que puede tardar más de 30 segundos en completarse, entonces el servidor nginx restablecerá la conexión al cliente enviando un paquete RST al cliente si el tiempo de carga supera los 30 segundos.
Para que nginx espere más tiempo para escuchar los datos del cliente, establezca este valor en un valor más alto.
Para obtener información detallada sobre lingering_time, míralo aquí lingering_time
fuente