nginx rewrite POST-Anforderung
Muss ich senden-POST-request an meine nginx-frontend-server das sollte leiten es an upstream Server.
Details:
senden Anfrage an http://192.168.0.10/foo/bar/blah und die URL in diesem Antrag sollte geändert werden, um http://192.168.0.21[22,23]:8080/foo/bla
upstream myapp {
server 192.168.0.21:8080;
server 192.168.0.22:8080;
server 192.168.0.23:8080;
}
server {
listen 80;
server_name localhost;
location /foo/bar/blah/{
rewrite ^/foo/blah^//$1 break;
proxy_pass http://myapp;
}
aber in der nginx error log sehe ich, dass ich meine Anfrage geändert von POST zu BEKOMMEN und scheint auch nicht ändern, URL:
"POST /foo/bar/blah HTTP/1.1" 301 185 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64)
"GET /foo/bar/blah/HTTP/1.1" 404 117 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64)
Wie kann ich mein POST-Anforderung, und ändern Sie die URL?
Auch über meine rewrite-Regel
rewrite ^/foo/blah^//$1 break;
Fand ich eine Menge Beispiele für das ändern der URL und alle von Ihnen gleich aussieht.
Und es ist wirklich seltsam für mich, wie das rewrite-Regel ändern können URL aus /foo/bar/bla/, /foo/bla/:
in documentaion sagt:
http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite
Wenn der angegebene reguläre Ausdruck entspricht einer request-URI, URI-ist
geändert wie angegeben, in der Ersatz-Zeichenfolge.
aber in meinem Fall im request-URI ist /foo/bar/bla/also regulären Ausdruck /foo/foo^/nicht entspricht, URI, so dass diese Regel nicht funktionieren sollte.
Bin ich im Recht?
Wäre hilfreich, jeder rät.
UPD:
behoben:
location = /foo/bar/blah {
proxy_pass http://myapp/foo/blah;
}
/foo/bar/blah
dann auch nicht location /foo/bar/blah/
sollten übereinstimmen, dass in der ersten Ort (keine nachgestellten Schrägstrich.) // Wenn Sie möchten, dass der client nicht ändern Sie den request-Methode auf einen redirect, dann müssen Sie eine 307 Temporary Redirect
. Aber es sieht aus wie Sie nicht wollen, um tatsächlich umleiten des Clients, sondern übergeben Sie die Daten auf intern, so dass Ihr nginx als proxy fungiert. Das sind verschiedene Dinge ...so wie man die richtige Regel? Ich habe gerade gelöscht trailing slash in meine umschreiben, und es scheint, beginnt zu senden-POST, aber noch nicht umschreiben URI
InformationsquelleAutor Trav Erse | 2017-03-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine Vermutung, brauchen Sie nicht neu zu schreiben.
Dies sollte entfernen
/foo/bar
Teil von Proxy-URL.location = /foo/bar/blah { proxy_pass http://myapp/foo/blah; }
und es funktioniert wie erwartet.Sie sollten akzeptieren, dass diese Antwort so Alexey erhält Kredit
InformationsquelleAutor Alexey Ten