2017-03-15 35 views
1

アップストリームサーバにリダイレクトする必要がある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; 
     } 
+0

もしあなたが '/ foo/bar/blah'にPOSTすれば、' location/foo/bar/blah/'さえも最初の場所のものと一致するはずです(後ろにスラッシュはありません)。//クライアントリダイレクトでリクエストメソッドを変更しない場合は、 '307 Temporary Redirect'を使う必要があります。しかし、実際にクライアントをリダイレクトするのではなく、内部的にデータを渡して、nginxがプロキシとして機能するように見えます。それらは異なるものです... – CBroe

+0

どのように正しいルールを作成するには?私は書き直しの後にスラッシュを削除しましたが、POSTを送信してもまだURIを書き換えていないようです –

答えて

0

私の推測では、書き換えを必要としません。

location /foo/bar/ { 
    proxy_pass http://myapp/; 
} 

プロキシされたURLから/foo/bar部分を削除する必要があります。

+0

ありがとうございます。私はそれを に変更しました。{location =/foo/bar/blah { http:// myapp/foo/blah; } ' と期待どおりに動作します。 –

関連する問題