2012-06-05 24 views
20

A veces me sale un problema con el error 502 cuando el servicio httpd está inactivo. Pero solo en 1 minuto vuelve el sitio web.Cómo crear un error personalizado 502 nginx en el núcleo de nginx (no se usa redirigir a la página de error)?

Necesito personalizar el mensaje 502 para pedirle al usuario que espere 1 minuto y luego actualice la página, o incruste JavaScript o la meta etiqueta de actualización en la página de actualización automática después de 1 minuto. URL de página debe ser la misma para hacer efecto de refresco

en cuenta que lo que sé de la página personalizada de error de redirección por ejemplo location = /502.html, pero ese tipo de página personalizada de error se redirigirá al usuario otra página, si van a actualizar la página que se ha obtenido un error página otra vez

Cualquier idea será muy útil.


ACTUALIZACIÓN EDITAR para más detalles 10/06/2012.

Mi nginx config:

user nobody; 
# no need for more workers in the proxy mode 
worker_processes 24; 
error_log /var/log/nginx/error.log crit; 
#worker_rlimit_nofile 20480; 
events { 
worker_connections 109024; # increase for busier servers 
use epoll; # you should use epoll here for Linux kernels 2.6.x 
} 

http { 
server_name_in_redirect off; 
server_names_hash_max_size 2048; 
server_names_hash_bucket_size 256; 
include mime.types; 
default_type application/octet-stream; 
server_tokens off; 
sendfile on; 
tcp_nopush on; 
tcp_nodelay on; 
keepalive_timeout 20; 

ignore_invalid_headers on; 
client_header_timeout 50m; 
client_body_timeout 50m; 
send_timeout  20m; 
reset_timedout_connection on; 
connection_pool_size 2048; 
client_header_buffer_size 256k; 
large_client_header_buffers 4 256k; 
client_max_body_size 20M; 
client_body_buffer_size 300k; 
request_pool_size 32k; 
output_buffers 14 32k; 
postpone_output 1460; 
proxy_temp_path /tmp/nginx_proxy/; 
proxy_cache_path /dev/shm/nginx levels=1:2 keys_zone=wwwcache:45m inactive=5m max_size=1000m; 
client_body_in_file_only off; 
access_log off; 
open_log_file_cache off; 
#log_format bytes_log "$msec $bytes_sent ."; 
include "/etc/nginx/vhosts/*"; 
} 

y host virtual config:

server { 
#   error_log /var/log/nginx/vhost-error_log warn; 
      listen 123.30.137.66:80; 
      server_name xaluan.net mtvvui.com www.daiduong.com.au www.xaluan.net xaluan.com www.xaluan.com www.daiduongrestaurant.net veryzoo.com www.mtvvui.com www.xaluan.org www.veryzoo.com daiduongrestaurant.net xaluan.org daiduong.com.au; 
#   access_log /usr/local/apache/domlogs/xaluan.net combined; 
      root /home/xaluano/public_html; 
      location/{ 
     if ($http_cache_control ~ "max-age=0") { 
       set $bypass 1; 
      } 

     location 
~.*\.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|htm|txt|js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso)$ 
{ 
     #root /home/xaluano/public_html; 
    #proxy_cache wwwcache; 
     #proxy_cache_valid 200 15m; 
     #proxy_cache_bypass $bypass; 
      expires 1d; 
      #try_files $uri @backend; 
     proxy_pass http://123.30.137.66:8081; 
      } 
      error_page 405 = @backend; 
      add_header X-Cache "HIT from Backend"; 
     #proxy_set_header Server "Caching-Proxy"; 
      #add_header X-Cache-Vinahost "HIT from Backend"; 
     proxy_pass http://123.30.137.66:8081; 
      include proxy.inc; 

      } 


      location @backend { 
      internal; 
      proxy_pass http://123.30.137.66:8081; 
      include proxy.inc; 
      } 
      location ~ .*\.(php|jsp|cgi|pl|py)?$ { 
      #proxy_cache wwwcache; 
     #proxy_cache_valid 200 15m; 

     proxy_pass http://123.30.137.66:8081; 
      include proxy.inc; 
      } 
      location ~ /\.ht { 
      deny all; 
      } 

    } 

== la prueba caso ..

Si el servicio httpd de Apache se detiene: #service httpd stop

A continuación, abra en el buscador este enlace: http://www.xaluan.com/modules.php?name=News&file=article&sid=123456 Verá el error 502 con la misma URL en la dirección del navegador.

== página de error personalizada necesito la configuración que le ayudará cuando Apache falla, se mostrar el mensaje personalizado diciendo usuario que espere durante 1 minuto para el servicio en ese entonces, volver a cargar la página actual con misma dirección URL (actualizar Puedo hacer las cosas fácilmente con JavaScript), Nginx no cambia la URL para que JavaScript pueda funcionar.

Respuesta

27

Encontré una respuesta que me funciona. En el archivo de configuración de host virtual, puse justo al final del bloque server, antes de cerrar corsé:

error_page 502 /502.html; 
location = /502.html { 

     root /home/xaluano/public_html; 

    } 

Por supuesto, también tengo que crear un archivo 502.html en mi raíz del dominio, con el actualización de meta-tag y actualización automática de script java.

El contenido de la página html es:

<head> 
<meta http-equiv="refresh" content="40" /> 
</head> 
<body> 
<script language="JavaScript" type="text/javascript"> 
/*<![CDATA[*/ 
var TimerVal = 40; 
var TimerSPan = document.getElementById("CDTimer"); 
function CountDown(){ 
    setTimeout("CountDown()", 1000); 
    TimerSPan.innerHTML=TimerVal; 
    TimerVal=TimerVal-1; 
    if (TimerVal<0) { TimerVal=0; 
    location.reload(true); 
// window.location.href = "http://www.xaluan.com"; 
    } //improvement by vivalibre, tq 
} 
CountDown(); 
/*]]>*/ </script> 
</body> 
+0

Tenga en cuenta que también tuve que agregar 'try_files $ uri /502.html;' al bloque 'location =/502.html' (usando nginx versión 1.2.1) –

+0

¡Gracias! Eso funcionó perfectamente. –

4

http://nginx.org/r/error_page

Tenga en cuenta que realiza error_page 502 /502.html;interna redirección. No cambia la URL en la barra de direcciones del navegador.

+0

está usted significa código que fluye no chage url del navegador ?: error_page 502 /502.html; location = /502.html { root/home/xaluano/public_html; } –

+0

Sí, no cambiará. – VBart

+1

Hice una prueba ...y aún cambia la URL del navegador; también pruebo con interno; pero aún el mismo resultado. me envía a la raíz de domain.com/502.html –

Cuestiones relacionadas