web-dev-qa-db-ja.com

nginx proxy_passを使用してLocationヘッダーを変更する

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;
}
15
user2010963

あなたはそれを修正するために正規表現を使うことができるかもしれませんが、より良い方法はプロキシリダイレクトを使うことです:

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/も追加する必要があります(個別のリダイレクト)。

お役に立てれば!

16