Ele informa que o URI na diretiva de proxy pass não pode ser usado em um local regex. Isso ocorre porque o nginx não pode substituir a parte do URI que corresponde à regex no bloco location
pelo que foi transmitido pela diretiva proxy_pass
de maneira genérica.
Basta imaginar que sua regex de localização é /foo/(.*)/bar
e você especifica proxy_pass http://server/test
, nginx teria que mapear sua localização regex para outra em um nível superior porque você não quer terminar com /foo/test/bar/something
, mas com% código%. Então isso não é possível nativamente.
Portanto, para esta parte, utilizar o seguinte deve funcionar:
server {
[ ... ]
location ~ ^/smx/(test|production) {
rewrite ^/smx/(?:test|production)/(.*)$ /cxf/$1 break;
proxy_pass http://localhost:8181;
}
location ~ ^/es/(test|production) {
rewrite ^/es/(?:test|production)/(.*)$ /$1 break;
proxy_pass http://localhost:9200;
}
}
No entanto, não será possível reescrever redirecionamentos para que correspondam ao padrão de URI do bloco de localização, porque ele reescreve o URI atual processado, impossibilitando a alteração do cabeçalho /test/something
com base na solicitação inicial antes de reescrever.