Comment peut-paramètres de chaîne de requête transmise par le biais d'un proxy_pass avec nginx?
upstream apache {
server 127.0.0.1:8080;
}
server{
location ~* ^/service/(.*)$ {
proxy_pass http://apache/$1;
proxy_redirect off;
}
}
L'extrait ci-dessus pour rediriger les demandes dont l'url contient la chaîne "service" à un autre serveur, mais il ne comprend pas les paramètres de la requête.
Vous devez vous connecter pour publier un commentaire.
De la proxy_pass documentation:
Puisque vous êtes en utilisant $1 dans la cible, nginx compte sur vous pour lui dire exactement ce qu'à passer. Vous pouvez résoudre ce problème de deux façons. Tout d'abord, le décapage le début de l'uri avec un proxy_pass est trivial:
Ou si vous souhaitez utiliser les regex emplacement, il suffit d'inclure le args:
location /service/ { rewrite ^\/service\/(.*) /$1 break; proxy_pass http://apache; }
J'utilise une version légèrement modifiée de kolbyjack deuxième approche avec
~
au lieu de~*
.J'ai modifié @kolbyjack code pour le faire fonctionner pour
avec des paramètres
proxy_pass
la directive ci-dessus ne la redirection côté serveur.vous devez utiliser la réécriture de passer des paramètres à l'aide de proxy_pass
voici l'exemple que j'ai fait pour angularjs déploiement des applications à s3
S3 Hébergement de Site Statique Route Tous Chemins Index.html
adoptée à vos besoins serait quelque chose comme
si vous souhaitez retrouver dans http://127.0.0.1:8080/query/params/
si vous souhaitez retrouver dans http://127.0.0.1:8080/service/query/params/
vous aurez besoin de quelque chose comme
/path/params
) bien mais pas de requête params (?query=params
)?github gist https://gist.github.com/anjia0532/da4a17f848468de5a374c860b17607e7
Pour rediriger Sans Chaîne de Requête ajouter les lignes ci-dessous dans le bloc de Serveur sous écouter de la ligne du port:
Avec Chaîne De Requête:
if
lorsque cela est possible. Dans ce cas, la solution pourrait être de droite à l'aide delocation
comme indiqué dans un autre réponses.