Ich versuche, diese beiden Standortrichtlinien in Nginx zum Laufen zu bringen, aber beim Booten von Nginx werden einige Fehler zurückgegeben.
location ~ ^/smx/(test|production) {
proxy_pass http://localhost:8181/cxf;
}
location ~ ^/es/(test|production) {
proxy_pass http://localhost:9200/;
}
Dies ist der Fehler, den ich erhalte:
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
Kommt es jemandem bekannt vor? Was ich vermisse ich hier?
/
mein Konfigurationsproblem behoben, es war schwer zu fassen, danke!Sie erfahren, dass der URI in der Proxy-Pass-Direktive nicht in einem regulären Ausdruck verwendet werden kann. Dies liegt daran, dass nginx den Teil des URI, der mit dem regulären Ausdruck im
location
Block übereinstimmt, nicht durch den in derproxy_pass
Direktive generisch übergebenen ersetzen kann .Stellen Sie sich einfach vor, Ihr Standort-regulärer Ausdruck ist
/foo/(.*)/bar
und Sie geben anproxy_pass http://server/test
, dass nginx Ihren Standort-regulären Ausdruck einem anderen auf einer höheren Ebene zuordnen müsste, weil Sie nicht mit,/foo/test/bar/something
sondern mit enden möchten/test/something
. Das ist also nativ nicht möglich.Für diesen Teil sollte also Folgendes funktionieren:
Es ist jedoch nicht möglich, Redirects neu zu schreiben, um sie mit dem URI-Muster des Standortblocks abzugleichen, da der aktuell verarbeitete URI neu geschrieben wird. Dies macht es unmöglich, den
Location
Header basierend auf der ursprünglichen Anforderung vor dem erneuten Schreiben zu ändern .quelle