Próbuję przywrócić działanie tych 2 dyrektyw lokalizacji w Nginx, ale otrzymuję błędy podczas uruchamiania Nginx.
location ~ ^/smx/(test|production) {
proxy_pass http://localhost:8181/cxf;
}
location ~ ^/es/(test|production) {
proxy_pass http://localhost:9200/;
}
To jest błąd, który otrzymuję:
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
Czy to brzmi znajomo? Czego tu brakuje?
/
naprawiło mój problem z konfiguracją, było trudne do złapania, dzięki!Mówi ci, że URI w dyrektywie proxy proxy nie może być używany w lokalizacji wyrażenia regularnego. Wynika to z faktu, że nginx nie może zastąpić części identyfikatora URI pasującego do wyrażenia regularnego w
location
bloku tym, który został przekazany wproxy_pass
dyrektywie w sposób ogólny.Po prostu wyobraź sobie, że twoja regex lokalizacji jest
/foo/(.*)/bar
, a ty określaszproxy_pass http://server/test
, że nginx musiałby mapować regex lokalizacji na inną na wyższym poziomie, ponieważ nie chcesz kończyć,/foo/test/bar/something
ale z/test/something
. Więc nie jest to możliwe natywnie.W przypadku tej części korzystanie z następujących elementów powinno działać:
Jednak przekierowanie przekierowań w celu dopasowania do wzorca URI bloku lokalizacji nie będzie możliwe, ponieważ przepisuje bieżący przetwarzany URI, uniemożliwiając zmianę
Location
nagłówka na podstawie początkowego żądania przed przepisaniem.źródło