J'essaie de faire en sorte que ces 2 directives d'emplacement fonctionnent dans Nginx, mais certaines erreurs me sont renvoyées lors du démarrage de Nginx.
location ~ ^/smx/(test|production) {
proxy_pass http://localhost:8181/cxf;
}
location ~ ^/es/(test|production) {
proxy_pass http://localhost:9200/;
}
C'est l'erreur que je reçois:
nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression, or inside named location, or inside "if" statement, or inside "limit_except" block
Cela vous semble familier? Qu'est-ce qui me manque ici?
/
problème corrigé mon problème de configuration, il était difficile à attraper, merci!Il vous indique que l'URI dans la directive de passe proxy ne peut pas être utilisé dans un emplacement regex. En effet, nginx ne peut pas remplacer la partie de l'URI correspondant à l'expression rationnelle dans le
location
bloc par celle transmise deproxy_pass
manière générique dans la directive.Imaginez simplement que votre regex de localisation est
/foo/(.*)/bar
, et vous précisezproxy_pass http://server/test
, que nginx devrait mapper votre regex de localisation sur un autre niveau supérieur, car vous ne voulez pas terminer avec,/foo/test/bar/something
mais avec/test/something
. Donc, ce n'est pas possible nativement.Donc, pour cette partie en utilisant ce qui suit devrait fonctionner:
Cependant, il ne sera pas possible de réécrire les redirections pour qu'elles correspondent au modèle d'URI du bloc d'emplacement car il réécrit l'URI en cours de traitement, rendant impossible la modification de l'en-
Location
tête en fonction de la demande initiale avant la réécriture.la source