2011-11-23 19 views
15

Para fines de SEO, nos gustaría cambiar el código de estado HTTP devuelto cada vez que la máquina back-end detrás de nginx se apaga por algún motivo.¿Es posible cambiar el código de estado HTTP devuelto cuando proxy_pass gateway está inactivo en nginx?

Queremos cambiar esto a "Servicio 503 no disponible". Además de proporcionar un encabezado Retry-After para indicar a Google/Bing que la solicitud se debe reintentar en X cantidad de segundos.

¿Esto es posible a través de nginx?

No estoy hablando de una página de error personalizada, sino más bien del código de estado que se devuelve en el encabezado.

Respuesta

29

Creo que va a tiene que configurar una página de error específico, sin embargo, puede lograr lo que está buscando si lo hace. Prueba esto:

location/{ 
    proxy_pass http://backend; 
    proxy_intercept_errors on; 
    error_page 502 503 504 =503 @proxyisdown; # always reply with 503 
} 

location @proxyisdown { 
    add_header Retry-After 500; 
    index my_pretty_error_page.html; 
} 

Si trabaja de esta manera usted debería ser capaz de devolver el 503 (que es la parte =503 de la directiva error_page) y vuelva a intentar después de los encabezados con la ventaja de que sus visitantes recibirán un formato agradable "Uy, en este momento estamos experimentando problemas, inténtelo de nuevo en unos pocos minutos" en lugar de una página en blanco "503 no sabes realmente lo que esto significa". :)

+0

lo intentaremos más tarde hoy. Debería haber sido más claro en la pregunta, también se usará una página de error personalizada ... es solo que sabemos cómo hacerlo, simplemente no sabía cómo cambiar el código de estado/agregar el encabezado de reintento. de todos modos, regresaremos dentro de las 12 horas y le haremos saber qué se nos ocurre. Dicho esto, esto se ve exactamente como lo que estamos buscando :) thx. –

+0

Se actualizó la respuesta para dar más claridad al devolver el código de error requerido. –

+1

Todo funciona como se esperaba. Excepto que add_header no es compatible con una respuesta 503 en nginx. Consulte http://forum.nginx.org/read.php?2,3727 para obtener más información. –

2

Nombre de su página de error y /500.html:

error_page 400 404 500 502 504 =503 /500.html; 

# Optional if your public root is set above and the same for error pages, 
# I sometimes please them outside the app, which is why I'm including it. 
location /500.html { 
    root /path/to/public; 
} 

debería funcionar así y parece un poco más simple para mí. Nota: tampoco admite el encabezado.

Cuestiones relacionadas