2 votes

Empêcher nginx proxy_pass 302

J'ai deux blocs serveur définis sur mon serveur pour effectuer diverses redirections. Dans l'exemple simplifié ci-dessous, une redirection 302 est émise. J'aimerais que cette requête soit traitée par un proxy de manière transparente pour l'utilisateur.

Comment puis-je le faire ?

Lorsque j'utilise un bloc d'emplacement défini comme location =/ un 200 est émis comme prévu.

http {
    server {
        server_name acme;
        listen 80;
        include mime.types;

        # http://acme/web/style.css -> http://127.0.0.1:8080/web/style.css
        location ~^/web/.*$ {
            proxy_pass http://127.0.0.1:8080;
        }

       # http://acme/style.css -> http://127.0.0.1:8080/acme/style.css
       location ~^(.+)$ {
           proxy_pass http://127.0.0.1:8080/acme$1;
       }
    }
}

1voto

HugoFS Points 313

Il est possible pour nginx pour intercepter le code de réponse 302 et le traiter en interne. J'ai mis en place un scénario de test qui a fonctionné en utilisant cette méthode :

location /some/uri/ {
    error_page 302 = @fallback;
    proxy_intercept_errors on;
    proxy_pass ...;
}
location @fallback {
    rewrite ^ /some/other/uri last;
}

Il s'agirait bien sûr d'une interception générale sans tenir compte de la valeur des en-têtes de réponse, mais cela peut être suffisant pour vos besoins. Voir diese y diese pour plus.

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