- 実現したいこと
https://node:443/test へブラウザからアクセスした際にブラウザに表示されるURLは
https://node:443/test のままでhttp://172.30.80.100 のWeb画面を表示すること。
- 実現したい理由
クライアントからは、172.30.80.100(管理用サーバー)に直接アクセスさせたくない、あくまでnodeへのアクセスにしたいため。
- 困っていること
https://node:443/test へブラウザからアクセスするとURLがhttp://172.30.80.100 に変わってしまい、http://172.30.80.100 のWeb画面を表示すること。
- nginxのconfファイルの設定(部分抜粋)
server { server_name node; listen 443 ssl; listen [::]:443 ssl; location /test { proxy_pass http://172.30.80.100; } }
- 補足
基本的なリバースプロキシの思想から外れますが、現状検証環境のため、
クライアントから172.30.80.100へのアクセスはできます。(これが原因の可能性もある?)
- curlの結果
C:\Users\Sysg> curl -v https://node:443/test * Trying 172.30.80.91:443... * Connected to node (172.30.80.91) port 443 (#0) * schannel: disabled automatic use of client certificate * ALPN: offers http/1.1 * ALPN: server accepted http/1.1 > GET /test HTTP/1.1 > Host: node > User-Agent: curl/7.83.1 > Accept: */* > * Mark bundle as not supporting multiuse < HTTP/1.1 301 Moved Permanently < Server: nginx/1.18.0 (Ubuntu) < Date: Fri, 26 Aug 2022 01:29:15 GMT < Content-Type: text/html < Content-Length: 162 < Connection: keep-alive < Location: https://node/ < <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html> * Connection #0 to host node left intact
どのようにconfファイルを記述すれば、「実現したいこと」はできますか?
どういう経緯でこれを行いたいのかは質問文内に書いておいた方がいいかもしれません。使い方次第では色んな事に悪用できる話にもなるので、その辺の説明がないと回答しにくい質問のように見えます。
ありがとうございます。実際のIPに変更したのと、実現したい理由を追記しました。
理由になってません。というか、重要なのは 172.30.80.100 が自分が管理する (または、そのように利用する権限を与えられた) サーバーかどうかでしょうね…。
最初と比べてかなり質問の意味合いが変わりましたね・・・ 悪用云々は置いておいて、172.30〜ってプライベートIPアドレスでリバースプロキシ入ってるサーバから普通にアクセスできるんですよね? その設定なら普通に望み通りに動きそうな気もしますが。443なので証明書の設定が必要だったりするのかな? listenを80にして単純にhttpでアクセスしたらどうなるでしょうか?
リバースプロキシも172.30.80.99の同一セグメント上に設置されていて、普通にアクセスができます。
443のためサーバー証明書の設定はしております。
ポート80にして、httpアクセスさせてみたのですが、同じ挙動です。
何が原因と考えられるでしょうか?
172.30.〜 はプライベートアドレスでしたね。失礼しました。
「URLがhttp://172.30.80.100 に変わってしまい」ってことは管理用サーバー側でリダイレクトしてるのかも。curl -v https://node:443/test したらどうなりますか?
また、nginx のリバースプロキシ設定には proxy_set_header Host $host; などと書くのが一般的のような…。(書かなくても動く気もしますが…。)
https://qiita.com/hyakt/items/c0aa8005d9a9700fbe45
ありがとうございます。
管理用サーバー側の設定を確認してみます。
curl -vの結果を追加しました。
proxy_set_headerの追加もしてみたのですが、挙動の変化はありませんでした。

回答1件
あなたの回答
tips
プレビュー