4 votes

la page d'erreur nginx et les directives internes ne fonctionnent pas comme prévu

Je voudrais configurer mon serveur nginx pour qu'il renvoie une page d'erreur spécifique sur les codes d'état HTTP 50x, et je voudrais que cette page soit indisponible par une demande directe des utilisateurs (par exemple, http//mysite/internalerror).

Pour cela, j'utilise la fonction de nginx internal mais je dois rater quelque chose, car lorsque je place cette directive dans mon fichier /internalerror nginx renvoie une erreur 404 personnalisée (qui n'est même pas ma propre page d'erreur 404) lorsqu'une page se ferme.

Donc, pour résumer, voici ce qui semble se passer :

  1. GET /Home
  2. nginx transmet la requête à Python
  3. Je simule un bug d'application pour obtenir le code d'erreur 502
  4. nginx essaie de renvoyer /InternalError à partir de ses error_page règle
  5. en raison de la internal il échoue finalement sur un code d'erreur 404 personnalisé. <-- pourquoi ? la documentation dit error_page ne sont pas concernées par les directives internal : http://wiki.nginx.org/HttpCoreModule#internal

Voici un extrait de nginx.conf avec quelques commentaires pour préciser les choses :

error_page  404 /NotFound;
error_page  500 502 503 504 =500 /InternalError; # HTTP 500 Error page declaration

location / {
    try_files /Maintenance.html $uri @pythonbackend;
}

location @pythonbackend {
    include uwsgi_params;
    uwsgi_pass unix:///tmp/uwsgi.sock;
}

location ~* \.(py|pyc)$ { # This internal location works OK and returns my own 404 error page
    internal;
}

location /__Maintenance.html { # This one also works fine
    internal;
}

location ~* /internalerror { # This one doesn't work and returns nginx's 404 error page when I trigger an error somewhere on my site
    internal;
}

Merci beaucoup pour votre aide !

2voto

Daniel Ford Points 51

Il n'y a pas beaucoup de sens à utiliser "~*" pour l'emplacement de /internalerror, un emplacement simple suffirait.

Vous obtenez 404 parce que le fichier /InternalError est manquant. Avez-vous l'intention de servir de telles requêtes à partir du backend uwsgi ?

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