17

proxy_passすべてのリクエストを/apiバックエンド Tomcat REST サービスに渡すための nginxセットアップがあります。Locationこのサービスは、リクエストのタイプに応じて異なるヘッダーを返す場合があります。たとえば、 Tomcat でホストされているためですLocation: http://foo.bar/baz/api/search/1234567baz

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;
}
4

1 に答える 1

23

regexp を使用して変更できる場合もありますが、より良い方法はプロキシ リダイレクトを使用することです。

proxy_redirect http://foo.bar/baz/ /;

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

のすべての Location ヘッダーは次の場所foo.bar/baz/に移動します/

リダイレクトしたいだけなら/baz/api、それもうまくいきます。

リダイレクトもポートを追加している場合はhttp://foo.bar:8080/baz/、同様に追加する必要があります (別のリダイレクト)。

お役に立てれば!

于 2013-12-01T10:38:43.630 に答える