1 votes

Faire un dossier de page d'erreur qui sert une erreur 403 aux demandes externes

Je suis en train de bricoler un serveur et j'ai fait d'un des sous-domaines un proxy pour un service qui n'est pas toujours opérationnel. Le site server Le bloc ressemble :

server {
    server_name servlet.example.org;
    error_page 502 /error/down.html;

    location / {
        proxy_pass http://127.0.0.1:12510;
        proxy_redirect default;
        proxy_intercept_errors on;
    }

    location /error/ {
        root /path/to/servlet;
        autoindex off;
    }
}

Cela sert /path/to/servlet/error/down.html à toute demande lorsque le service est en panne et c'est génial.

Mon problème est que je voudrais que toute demande externe à l'entreprise /error/ retourner un code d'état 403, avec une page d'erreur personnalisée, par exemple forbidden.html que l'on trouve également dans le /error/ dossier. Le site internal semble être ce que je veux, mais elle renvoie 404s. Je ne peux pas remplacer les erreurs 404 sur l'ensemble du serveur par des 403 avec la directive error_page car le service peut renvoyer ses propres 404 et j'aimerais préserver cela.

Est-ce possible ? Comment dois-je m'y prendre ? J'ai essayé des combinaisons apparemment significatives de internal y error_page mais ne peut aller nulle part.

En dehors de cela, puis-je au moins signifier une 403 à tout ce qui serait autrement 404 dans /error/ ? Je veux dire down.html y forbidden.html s'affichent normalement, mais tout le reste reçoit un 403 et s'affiche. forbidden.html .

0voto

algorithmshark Points 111

Je n'arrive pas à faire en sorte que le serveur fasse 403 tout en /error/ à l'extérieur, mais j'ai réussi le deuxième choix : 403 tout ce qui n'est pas disponible autrement.

J'ai dû utiliser rewrite pour que cela fonctionne, car sans cela, une requête à /error/ seul donnerait le message d'erreur par défaut de nginx, et non le message personnalisé. Je n'arrive toujours pas à comprendre.

server {
    server_name servlet.example.org;
    error_page 502 /error/down.html;
    error_page 403 /error/forbidden.html; # other error_pages for the
    error_page 404 /error/notfound.html;  #  proxy's output
    # ...

    location / {
        proxy_pass http://127.0.0.1:12510;
        proxy_redirect default;
        proxy_intercept_errors on;
    }

    location = /error/ {           # did you request /error/ ?
        rewrite .* /error/x last;  # not anymore!
    }                              # we can also omit autoindex now

    location /error/ {
        root /path/to/servlet;
        error_page 404 =403 /error/forbidden.html;
    }
}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X