2010-06-25 19 views
5

Im Versuch, die Fehlerseite in /temp/www/error403.html angezeigt werden, wenn ein 403-Fehler auftritt.mit nginx

Dies sollte immer dann sein, wenn ein Benutzer versucht, über https (ssl) auf die Site zuzugreifen. Die IP befindet sich in der Datei blovkips.conf, aber im Moment wird die Standardfehlerseite von nginx angezeigt. Ich habe den gleichen Code für meine anderen Server (ohne Sperrung) und es funktioniert.

Ist es die IP den Zugriff auf die benutzerdefinierte 403-Seite blockiert? Wenn ja, wie bekomme ich es zur Arbeit?

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: Korrigierte error_page Code 504-403, aber ich habe immer noch das gleiche Problem

Antwort

0

Es sieht aus wie es in der genannten Konfiguration ein Boo-Boo ist, da es nur Fehlercode Senden 503 („Dienst nicht verfügbar“) auf die benutzerdefinierte Seite, so dass für 403 („verboten“), die Sie wahrscheinlich verwenden möchten:

error_page 403 /error403.html 
+0

(Hier gehe ich davon aus, dass die blockips.conf Datei gültig ist, mit jedem Linien wie '1.2.3.4 leugnen;.)' – ewall

+0

Ja, um die blockips.conf ist korrekt, soweit ich weiß, ich habe nur das unkommentierte: alles ablehnen; (zum testen) – Mint

+0

Ok, habe ich die config-Datei mit 403 nicht 503 bearbeitet, jetzt einen Neustart gemacht und bekomme ich noch standardmäßig "403 Forbidden nginx" irgendwelche anderen Ideen? – Mint

1

Das Problem könnte sein, dass Sie von einem Webserver-Server einen 403 „Verboten“ Fehler sind versuchen, dass sie den Zugriff verboten ist. Nginx behandelt die error_page-Direktive als eine interne Umleitung. So versucht es Server https://example.com/error403.html, der auch verboten ist.

So müssen Sie die Fehlerseite nicht aus https wie diese bedient machen:

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

oder fügen Sie die benötigten „Zugriff erlaubt“ Optionen, um die Position für die Fehlerseite Pfad. Um dies zu testen, müssen Sie direkt auf die Seite /error403.html zugreifen. Wenn Sie auf diese Weise nicht zugreifen können, wird es nicht funktionieren, wenn jemand einen tatsächlichen Fehler 403 erhält.

0

Ich hatte das gleiche Problem ... Der Punkt ist, dass ich IP-Whitelist auf Server-Kontextebene (oder vhost-Ebene, wenn Sie bevorzugen) implementiert haben, so dass alle Standorte dies auch haben (basicaly/403.html gewonnen ‚t zugänglich sein):

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

    ... 
} 

Ausschluss conf.d Datei Beispiel:

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

, dass einfach zu beheben tun, um Ihre Rückkehr 403 auf Standortebene (Kontext):

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

    ... 
} 

Arbeiten für mich.