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