Он говорит вам, что URI в директиве proxy pass нельзя использовать в расположении регулярного выражения. Это связано с тем, что nginx не может заменить часть URI, совпадающую с регулярным выражением в location
блоке, частью, переданной в proxy_pass
директиве общим способом.
Просто представьте, что ваше регулярное выражение местоположения есть /foo/(.*)/bar
, и вы указываете proxy_pass http://server/test
, что nginx придется сопоставить ваше регулярное выражение местоположения с другим на верхнем уровне, потому что вы не хотите заканчивать, /foo/test/bar/something
а только /test/something
. Так что это не возможно изначально.
Таким образом, для этой части должно работать следующее:
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;
}
}
Однако невозможно будет переписать перенаправления в соответствии с шаблоном URI блока местоположения, поскольку он перезаписывает текущий обрабатываемый URI, что делает невозможным изменение Location
заголовка на основе первоначального запроса перед перезаписью.
/
исправил мою проблему с конфигурацией, это было трудно поймать, спасибо!