🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

プロキシ

プロキシは、二つ以上の相互接続されているプログラム又はデバイスの間に存在する中間サーバを指します。プロキシは、接続者の「代理」としてインターネット接続を行い、接続元にレスポンスを返します。また、その機能を実現するソフトウェアの意味合いもあります。

Q&A

解決済

1回答

12111閲覧

Nginxのupstreamを使ったプロキシ設定で、パスを変更する場合

d_tutuz

総合スコア730

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

プロキシ

プロキシは、二つ以上の相互接続されているプログラム又はデバイスの間に存在する中間サーバを指します。プロキシは、接続者の「代理」としてインターネット接続を行い、接続元にレスポンスを返します。また、その機能を実現するソフトウェアの意味合いもあります。

0グッド

0クリップ

投稿2019/10/09 09:43

編集2019/10/09 09:52

実現したいこと

クライアントからのリクエストをNginxのupstreamでプロキシしたい

困っていること

リクエストのパスがプロキシ先と異なる場合にどのように修正するのが良いかわからずご教示いただきたいです。

サーバ構成は以下のようになっています。

text

1======== =============== ========= 2|client| -> | nginx-server| -> |backend| 3======== =============== =========

今、クライアント(client)のアプリからNginxサーバ(nginx-server)に http://nginx-server/test というURLでGETリクエストがくると仮定します。
以下のような nginx.conf にすると、上記のリクエストは https:/example.com:443/test としてプロキシされる認識です。

nginx.conf

1 2user nginx; 3worker_processes auto; 4error_log /var/log/nginx/error.log; 5pid /run/nginx.pid; 6 7include /usr/share/nginx/modules/*.conf; 8 9events { 10 worker_connections 1024; 11} 12 13http { 14 upstream backend { 15 server example.com:443; 16 } 17 18 server { 19 location /test { 20 proxy_pass https://backend; 21 proxy_set_header Host example.com; 22 proxy_redirect off; 23 } 24 25 location /hoge { 26 proxy_pass https://backend; 27 proxy_set_header Host example.com; 28 proxy_redirect off; 29 } 30 } 31}

この場合に

クライアントからのリクエストURLプロキシ先URLコメント
http://nginx-server/testhttps:/example.com:443/another-testパスを変更
http://nginx-server/hogehttps:/example.com:443/hogeパスはそのまま

とプロキシします。

考えていたこと

何かしらのパスのrewriteや、リダイレストをする必要があると思っていますが、例えば以下のように nginx.conf を修正すると無限にリダイレクトされてしまうのでどうしたものかと...。

http { upstream backend { server example.com:443; server example.com:443; } server { location / { proxy_pass https://backend; proxy_set_header Host example.com; rewrite /.* another-test permanent; } location /hoge { proxy_pass https://backend; proxy_set_header Host example.com; proxy_redirect off; } } }

例えばパスを書き換えるクライアントからのリクエストの場合は、以下のように upstream を使わずに構成しないといけないのでしょうか?
(これは可用性の観点からビミョウですが...)

http { upstream backend { server example.com:443; server example.com:443; } server { location /test { proxy_pass https://example.com/another-test; proxy_redirect off; } location /hoge { proxy_pass https://backend; proxy_set_header Host example.com; proxy_redirect off; } } }

宜しくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

rewrite (permanent なし) で書き換えて upstream に渡すといいのでは?

location /test { rewrite /test/(.*)$ /another-test/$1 break; proxy_pass https://backend; proxy_set_header Host example.com; proxy_redirect off; }

投稿2019/10/09 15:10

TaichiYanagiya

総合スコア12173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問