Question NGINX renvoie les en-têtes corrects avec les documents d'erreur personnalisés


J'ai configuré NGINX pour renvoyer les documents d'erreur personnalisés pour mon serveur mandaté, il affiche le fichier correct mais renvoie toujours un 200 OK entête.

La configuration NGINX appropriée est

server {
    listen       94.23.155.32:80;
    server_name  rmg.io www.rmg.io;

    proxy_intercept_errors on;

    location / {
        proxy_pass http://rmgshort/;
    }

    error_page 404 = /error/404.html;
error_page 500 501 502 503 503 = /error/500.html;

    location /error/ {
        root /var/rmg/;
    }
}

Vous pouvez tester cela si vous voulez, cette page doit renvoyer une erreur 404, il renvoie le document correct mais modifie le code d'état en "200 OK" (Test des en-têtes HTTP ici), si je remplace root /var/rmg/ avec internal; l'en-tête correct est renvoyé, mais ma page d'erreur personnalisée ne fonctionne pas.

Comment faire pour que NGINX renvoie mon document d'erreur personnalisé avec l'en-tête de statut correct?

J'exécute NGINX 1.0.4 sur RHEL 6.1


5
2017-07-30 11:57


origine


RedHat 6.0 ou RHEL 6.0? - womble♦
@womble RHEL 6.1, désolé, je me réfère toujours à RedHat =) - Smudge
@womble Aussi pas sûr pourquoi j'ai mis 6.0 dans la question #facepalm - Smudge
Je ne pense pas que ce soit vraiment important ici. - rvs


Réponses:


Jeter le = hors de error_page directif; vous pouvez spécifier le code de retour que vous aimez avec =NNN (par exemple =401), mais si vous donnez un nu = cela signifie "utilise le code d'erreur du gestionnaire d'erreurs", qui sera toujours "200 OK" pour un fichier statique. Sans aucun =, vous obtiendrez le code d'erreur d'origine renvoyé.

Irritant, une lecture directe de le manuel (sinon) bien (au moment de la rédaction de cette réponse, en tout cas) pourrait vous faire penser que c’est l’inverse (= conserve le code de retour d'origine), mais les tests locaux indiquent qu'il fonctionne définitivement comme décrit ci-dessus.


12
2017-07-30 12:22



Ce n'est pas tout à fait exact. Un nu = signifie que Nginx utilisera le code d'état renvoyé par le gestionnaire d'erreurs désigné. Signification si vous faites error_page 404 = /handler.phpet ton handler.php le script retourne 200, il en utilise 200, si handler.php retourne 409 puis utilise 409. Je conviens cependant que l'entrée du wiki est mal formulée et je vais essayer de la clarifier un peu. - Martin Fjordvald
@ Martin: Merci pour la clarification; En fait, je n'ai jamais utilisé de gestionnaire d'erreurs non statique (et évidemment inutile), je ne me suis jamais trouvé dans une situation où le code de retour serait non-200. J'ai mis à jour ma réponse en conséquence. - womble♦