2010-06-25 13 views
5

Im tratando de mostrar la página de error en /temp/www/error403.html cada vez que se produce un error 403.Devolver página personalizada de error 403 con nginx

Esto debería ser siempre que un usuario intente acceder al sitio a través de https (ssl) y su IP esté en el archivo blovkips.conf, pero por el momento todavía muestra la página de error predeterminada de nginx. Tengo el mismo código para mi otro servidor (sin ningún bloqueo) y funciona.

¿Está bloqueando el acceso de IP a la página 403 personalizada? En caso afirmativo, ¿cómo hago para que funcione?

server { 
    # ssl 
    listen    443; 
    ssl     on; 
    ssl_certificate  /etc/nginx/ssl/site.in.crt; 
    ssl_certificate_key /etc/nginx/ssl/site.in.key; 
    keepalive_timeout 70; 

    server_name localhost; 


    location/{ 
      root /temp/www; 
      index index.html index.htm; 
} 

# redirect server error pages to the static page 
error_page 403 /error403.html; 
# location = /error403.html { 
#   root /temp/www; 
# } 

    # add trailing slash if missing 
    if (-f $document_root/$host$uri) { 
      rewrite ^(.*[^/])$ $1/ permanent; 
    }  

    # list of IPs to block 
    include blockips.conf; 
} 

Editar: código error_page corregido 504-403 pero todavía tengo el mismo problema

Respuesta

0

Parece que hay una metida de pata en la configuración de la lista, ya que sólo se está enviando el código de error 503 ("servicio no disponible") a la página personalizada, por lo que para 403 ("prohibido") es probable que desee utilizar:

error_page 403 /error403.html 
+0

(Aquí estoy suponiendo que el archivo blockips.conf es válido, con cada líneas como 'deny 1.2.3.4;'.) – ewall

+0

Sí, los bloqueos.conf es correcto, que yo sepa, solo tengo esto sin comentarios: negar todo; (para probar) – Mint

+0

Ok, edité el archivo de configuración con 403 y no 503 ahora, hice un reinicio y aún recibo por defecto '403 Forbidden nginx' cualquier otra idea? – Mint

1

El problema podría ser que intentas server un error "Prohibido" 403 de un servidor web al que tienen prohibido el acceso. Nginx trata la directiva error_page como una redirección interna. Por lo tanto, está tratando de servidor https://example.com/error403.html que también está prohibido.

por lo que necesita para hacer la página de error no sirvió de https así:

error_page 403 http://example.com/error403.html 

o añadir la necesaria "acceso permitido" opciones para la ubicación de la ruta de la página de error. La forma de probar esto es acceder a la página /error403.html directamente. Si no puede acceder de esa manera, no funcionará cuando alguien obtenga un error 403 real.

0

Tuve el mismo problema ... El punto es que he implementado la lista blanca de IP en el nivel de contexto del servidor (o nivel de host si lo prefieres), por lo que cada ubicación tendrá esto también (basicaly /403.html won 't ser accesible):

server { 
    listen  *:443 ssl; 
    server_name mydomain.com ; 
    error_page 403 /403.html; 
    ..... 
    if ($exclusion = 0) { return 403; } #implemented in another conf.d files (see below) 
    location ~ \.php$ { 
    root   /var/www/vhosts/mydomain.com/httpdocs; 
    include  /etc/nginx/fastcgi_par 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_connect_timeout 3m; 
    fastcgi_read_timeout 3m; 
    fastcgi_send_timeout 3m; 
    } 
    location /403.html { 
    root  /usr/share/nginx/html; 
    allow all; 
    } 

    ... 
} 

muestra de archivo conf.d. Exclusión:

geo $exclusion { 
    default 0; 
    10.0.0.0/8 Local network 
    80.23.120.23 Some_ip 
    ... 
} 

Para solucionar esto, simplemente hacer su declaración de 403 a nivel de ubicación (contexto):

server { 
    listen  *:443 ssl; 
    server_name mydomain.com ; 
    error_page 403 /403.html; 
    ..... 
    location ~ \.php$ { 
    if ($exclusion = 0) { return 403; } 
    root   /var/www/vhosts/mydomain.com/httpdocs; 
    include  /etc/nginx/fastcgi_par 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_connect_timeout 3m; 
    fastcgi_read_timeout 3m; 
    fastcgi_send_timeout 3m; 
    } 
    location /403.html { 
    root  /usr/share/nginx/html; 
    allow all; 
    } 

    ... 
} 

Funciona para mí.

Cuestiones relacionadas