/api
のすべてのリクエストをバックエンドのTomcat RESTサービスに渡すためのnginx proxy_pass
セットアップがあります。このサービスは、Location: http://foo.bar/baz/api/search/1234567
などのリクエストの種類によって異なるLocation
ヘッダーを返します。baz
部分はTomcatでホストされているためです。nginx proxy_passでロケーションヘッダーを変更する
現在の設定ではfoo.bar
ホスト名が正しく書き換えられますが、baz
部分はそのまま残ります。これを削除したいのですが、proxy_passオプションは、ヘッダーの新しい値をクリアまたは設定することに限定されているようです。
正規表現の代用を使用して、クライアントに渡す前に動的にヘッダーを変更する方法はありますか?これは私のnginxの設定です:
location /api {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_max_temp_file_size 0;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
proxy_redirect off;
proxy_pass http://foo.bar:8080/baz/api;
}
お返事ありがとうございますが、リダイレクト(これはうまくいきます)に興味はありませんが、サーバーの応答として返される「Location」ヘッダーを変更することにあります。 APIは、クライアントが前のクエリの結果を取得すると想定されるURLを含む 'Location'ヘッダを返します。これは、サーバーがプロキシされていることをサーバーが認識していないため、現在は障害のある場所を指しています。 – user2010963
proxy_redirectはLocationヘッダーを変更します...それがその目的です。 nginxのドキュメント(http://wiki.nginx.org/HttpProxyModule#proxy_redirect)を見てください:) –
ああ、私は参照してください!それは確かにそれをやった。ありがとうございました! (私は 'リダイレクト'は実際に何をするのに最適な名前ではないと思うが) – user2010963