アップストリームサーバにリダイレクトする必要があるnginxフロントエンドサーバにPOSTリクエストを送信する必要があります。詳細は :この要求でhttp://192.168.0.10/foo/bar/blahとURLへnginx POSTリクエストを書き直し
送信要求がhttp://192.168.0.21[22,23]:8080/foo/blah
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;
}
に変更する必要がありますが、nginxのエラーログに、私は私の要求をGETするPOSTから変更してもなかったようだことがわかり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)
私のPOSTリクエストを保存してURLを変更するにはどうすればよいですか?
また、私の書き換えルール
rewrite ^/foo/blah^/ /$1 break;
について私は、URLを変更するための例の多くを発見し、それらのすべてが同じに見えます。 そしてそれは、この書き換えルールは/ fooの/バー/何とか/に/ fooの/何とか/からURLを変更することができますどのように、私にとっては本当に奇妙です:documentaionで は言う: http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite
指定された正規表現と一致した場合要求URI、URIは が置換文字列で指定されたとおりに変更されています。
私の場合、リクエストURIは/ foo/bar/blah /ですので、正規表現/ foo/blah^/はURIと一致しないため、このルールは機能しません。 私はそうですか?
助言があれば助かります。
UPD: 固定:
location = /foo/bar/blah {
proxy_pass http://myapp/foo/blah;
}
もしあなたが '/ foo/bar/blah'にPOSTすれば、' location/foo/bar/blah/'さえも最初の場所のものと一致するはずです(後ろにスラッシュはありません)。//クライアントリダイレクトでリクエストメソッドを変更しない場合は、 '307 Temporary Redirect'を使う必要があります。しかし、実際にクライアントをリダイレクトするのではなく、内部的にデータを渡して、nginxがプロキシとして機能するように見えます。それらは異なるものです... – CBroe
どのように正しいルールを作成するには?私は書き直しの後にスラッシュを削除しましたが、POSTを送信してもまだURIを書き換えていないようです –