2010-06-25 26 views
5

Sto cercando di visualizzare la pagina di errore in /temp/www/error403.html ogni volta che si verifica un errore 403.Restituisce la pagina di errore 403 personalizzata con nginx

Questo dovrebbe essere ogni volta che un utente tenta di accedere al sito tramite https (ssl) e il suo IP è nel file blovkips.conf, ma al momento mostra ancora la pagina di errore predefinita di nginx. Ho lo stesso codice per il mio altro server (senza alcun blocco) e funziona.

Blocca l'IP dall'accesso alla pagina 403 personalizzata? Se sì, come faccio a farlo funzionare?

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; 
} 

Edit: codice error_page corretto 504-403, ma ho ancora lo stesso problema

risposta

0

Sembra ci sia un boo-boo nella configurazione elencato, in quanto è solo inviando il codice di errore 503 ("servizio non disponibile") per la pagina personalizzata, quindi per 403 ("proibito"), probabilmente si desidera utilizzare:

error_page 403 /error403.html 
+0

(Qui presumo che il file blockips.conf sia valido, con ogni riga come 'deny 1.2.3.4;'.) – ewall

+0

Sì, i blocchi.conf è corretto per quanto ne so, ho solo questo non commentato: negare tutto; (per i test) – Mint

+0

Ok, ho modificato il file di configurazione con 403 non 503 ora, ho fatto un riavvio e ho ancora il default '403 Forbidden nginx' altre idee? – Mint

1

Il problema potrebbe essere che si sta tentando di inviare un errore 403 "Proibito" da un server Web a cui è vietato l'accesso. Nginx tratta la direttiva error_page come un reindirizzamento interno. Quindi sta provando a server https://example.com/error403.html che è anche proibito.

Quindi è necessario per rendere la pagina di errore non è servito da https come questo:

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

o aggiungere il necessario "accesso consentito" opzioni per la posizione per il percorso di pagina di errore. Il modo per testare questo è accedere direttamente alla pagina /error403.html. Se non è possibile accedere in questo modo, non funzionerà quando qualcuno riceve un errore 403 effettivo.

0

Ho avuto lo stesso problema ... Il punto è che ho implementato la whitelist di IP a livello di contesto del server (o il livello di vhost se si preferisce), quindi ogni posizione avrà anche questo (basicamente /403.html vinto 't essere accessibile):

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; 
    } 

    ... 
} 

campione del file conf.d Esclusione:

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

per risolvere questo semplicemente fare il vostro ritorno 403 a livello di posizione (contesto):

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; 
    } 

    ... 
} 

Funziona per me.

Problemi correlati