Nginx proxy_pass
のセットアップで、/api
のすべてのリクエストをバックエンドのTomcat RESTサービスに渡します。このサービスはLocation
を返す場合がありますLocation: http://foo.bar/baz/api/search/1234567
などのリクエストのタイプによって異なるヘッダー-baz
の部分は、Tomcatでホストされているためです。
現在の構成では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;
}
あなたはそれを修正するために正規表現を使うことができるかもしれませんが、より良い方法はプロキシリダイレクトを使うことです:
proxy_redirect http://foo.bar/baz/ /;
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect
foo.bar/baz/
のLocationヘッダーはすべて/
に移動します
/baz/api
をリダイレクトしたいだけの場合も機能します。
リダイレクトによってポートも追加される場合は、http://foo.bar:8080/baz/
も追加する必要があります(個別のリダイレクト)。
お役に立てれば!