redireccionar - nginx with cache
El proxy inverso de Nginx provoca un tiempo de espera de puerta de enlace 504 (3)
Si desea aumentar o agregar un límite de tiempo a todos los sitios, puede agregar las siguientes líneas al archivo
nginx.conf
.
Agregue las líneas siguientes a la sección http
del archivo /usr/local/etc/nginx/nginx.conf
o /etc/nginx/nginx.conf
.
fastcgi_read_timeout 600;
proxy_read_timeout 600;
Si las líneas anteriores no existen en el archivo conf
, agréguelas, de lo contrario aumente fastcgi_read_timeout
y proxy_read_timeout
para asegurarse de que nginx y php-fpm no hayan agotado el tiempo de espera.
Para aumentar el límite de tiempo para un solo sitio, puede editar en vim
/etc/nginx/sites-available/example.com
location ~ /.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_read_timeout 300;
}
y después de agregar estas líneas en nginx.conf
, entonces no olvide reiniciar nginx.
service php7-fpm reload
service nginx reload
o, si está usando valet, simplemente escriba valet restart
.
Estoy usando Nginx como un proxy inverso que toma solicitudes y luego realiza un proxy_pass para obtener la aplicación web real del servidor que se encuentra en la parte superior ejecutándose en el puerto 8001.
Si voy a mywebsite.com o hago un wget, obtengo un 504 Gateway Timeout después de 60 segundos ... Sin embargo, si cargo mywebsite.com:8001, la aplicación se carga como se esperaba.
Así que algo está impidiendo nginx para comunicarse con el servidor ascendente ...
Todo esto comenzó después de que mi empresa de hosting reiniciara la máquina en la que se estaba ejecutando mi material, antes de eso no había ningún problema.
Aquí está mi bloque de servidores de vhosts:
server {
listen 80;
server_name mywebsite.com;
root /home/user/public_html/mywebsite.com/public;
access_log /home/user/public_html/mywebsite.com/log/access.log upstreamlog;
error_log /home/user/public_html/mywebsite.com/log/error.log;
location / {
proxy_pass http://xxx.xxx.xxx.xxx:8001;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Y el resultado de mi registro de errores de Nginx:
2014/06/27 13:10:58 [error] 31406 # 0: * 1 tiempo de espera de subida (110: tiempo de espera de conexión agotado) mientras se conectaba a la versión anterior, cliente: xxx.xx.xxx.xxx, servidor: mywebsite.com, solicitud: "GET / HTTP / 1.1", en sentido ascendente: " http://xxx.xxx.xxx.xxx:8001/ ", host: "mywebsite.com"
Aumentar el tiempo de espera probablemente no resuelva su problema ya que, como usted dice, el servidor web objetivo real está respondiendo bien.
Tuve este mismo problema y descubrí que tenía que ver con no usar un keep-alive en la conexión. No puedo responder por qué sucede esto, pero al borrar el encabezado de conexión resolví este problema y la solicitud fue procesada correctamente:
server {
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_pass http://localhost:5000;
}
}
Eche un vistazo a estas publicaciones que lo explican con más detalle: nginx close upstream connection after request Clarificación del encabezado Keep-alive http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive
Probablemente pueda agregar algunas líneas más para aumentar el período de tiempo de espera a flujo ascendente. Los siguientes ejemplos establecen el tiempo de espera en 300 segundos:
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
send_timeout 300;