176 votes

Comment les paramètres de chaîne de requête peuvent-ils être transférés via un proxy_pass avec nginx?

amont apache {
   serveur 127.0.0.1:8080;
}
serveur{
   emplacement ~* ^/service/(.*)$ {
      proxy_pass http://apache/$1;
      proxy_redirect off;
   }
 }

Le snippet ci-dessus redirigera les requêtes où l'URL inclut la chaîne "service" vers un autre serveur, mais il n'inclut pas les paramètres de requête.

3voto

apandey846 Points 301

Rediriger sans chaîne de requête, ajoutez les lignes suivantes dans le bloc serveur sous la ligne du port d'écoute :

if ($uri ~ .*.containingString$) {
           return 301 https://$host/$uri/;
}

Avec chaîne de requête :

if ($uri ~ .*.containingString$) {
           return 301 https://$host/$uri/?$query_string;
}

3voto

AnJia Points 99

Gist github https://gist.github.com/anjia0532/da4a17f848468de5a374c860b17607e7

#set $token "?"; # obsolète

set $token ""; # déclare le token comme "" (chaîne vide) pour la requête originale sans argument, car $is_args concatène toute variable en `?`

if ($is_args) { # si la requête a des arguments, met à jour le token en "&"
    set $token "&";
}

location /test {
    set $args "${args}${token}k1=v1&k2=v2"; # mise à jour de l'argument d'origine en ajoutant des paramètres personnalisés avec $token
    # si aucun argument $is_args est une chaîne vide, sinon c'est "?"
    # http est le schéma
    # service est le serveur amont
    #proxy_pass http://service/$uri$is_args$args; # obsolète, retire `/`
    proxy_pass http://service$uri$is_args$args; # transfert de proxy
}

#http://localhost/test?foo=bar ==> http://service/test?foo=bar&k1=v1&k2=v2

#http://localhost/test/ ==> http://service/test?k1=v1&k2=v2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X