1. ホーム
  2. nginx

[解決済み] NGINXのproxy_passまたはproxy_redirect

2022-03-12 22:04:01

質問

Nginx の proxy_pass について教えてください。

Nginxの外部からは、このようなURLがヒットします。 http://some-IP:8080/v2/platform/general/activity/plan ?.....

私のダウンストリーム・サービスはこんな感じです。 http://another-IP:8080/activity/plan ?...

を取り除きたい。

/v2/platform/general

を元の公開URLから取得し、上記のように私のダウンストリーム・サービスを呼び出します。

Nginxで、公開アクセスURLを下流のサービスにリダイレクトするにはどうすればよいですか?

こんなことをやってみました。

location /v2/platform/general/ {
  rewrite ^/(.*) /$1 break;
  proxy_redirect off;
  proxy_pass http://another-IP:8080;
  proxy_set_header Host $host;

しかし、それは動作しませんでした、任意の助けを求めます。

どのように解決するのですか?

proxy_passproxy_redirect は、全く異なる機能を持っています。その proxy_redirect ディレクティブの変更にのみ関係します。 Location レスポンスヘッダを生成します。参照 本書 をご覧ください。

あなたの rewrite ステートメントは、URIのさらなる修正を阻止すること以外には何もしません。この行は削除する必要があります。 proxy_pass をマッピングすることができます。以下を参照してください。

proxy_pass ディレクティブは、URI をマップすることができます (例. /v2/platform/general/foo から /foo ) に URI 値を追加することで実現できます。 proxy_pass の値と連動して動作します。 location の値を指定します。参照 本書 をご覧ください。

例えば、こんな感じです。

location /v2/platform/general/ {
    ...
    proxy_pass http://another-IP:8080/;
}

Hostヘッダを設定する必要があるのは、上流サーバがその値に対して正しく応答しない場合のみです。 another-IP:8080 .

を1つまたは複数追加する必要があるかもしれません。 proxy_redirect ステートメントを使用すると、アップストリームサーバが 3xx ステータスレスポンスを生成する際に Location ヘッダーの値です。