1. ホーム
  2. parameters

[解決済み] nginxでproxy_passを経由してクエリ文字列パラメータを転送するには?

2022-04-27 01:25:27

質問

upstream apache {
   server 127.0.0.1:8080;
}
server{
   location ~* ^/service/(.*)$ {
      proxy_pass http://apache/$1;
      proxy_redirect off;
   }
 }

上記のスニペットは、URL に "service" という文字列が含まれるリクエストを別のサーバーにリダイレクトします(ただし、クエリパラメータは含まれません)。

解決するには?

からの proxy_pass のドキュメントを参照してください。

特殊なケースとして、proxy_passステートメントで変数を使用することがあります。リクエストされたURLは使用されず、ターゲットURLを自分で構築する責任があります。

ターゲットに $1 を使っているので、nginx は何を渡すか正確に教えてくれることを頼りにしています。 この問題は2つの方法で解決できます。 まず、proxy_passでURIの先頭を削除するのは簡単です。

location /service/ {
  # Note the trailing slash on the proxy_pass.
  # It tells nginx to replace /service/ with / when passing the request.
  proxy_pass http://apache/;
}

また、正規表現の場所を使用したい場合は、引数を含めるだけです。

location ~* ^/service/(.*) {
  proxy_pass http://apache/$1$is_args$args;
}