質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

nginx

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

プロキシ

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

Q&A

解決済

1回答

2092閲覧

nginxのリバースプロキシnginx.confの書き方

taro373

総合スコア189

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

nginx

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

プロキシ

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

0グッド

0クリップ

投稿2022/02/01 02:52

編集2022/02/01 04:17

nginxのリバースプロキシnginx.confの書き方について教えてください。

現在、2つのコンテナを下記のdockerコンテナで起動しています。

$ docker run -d --name update_history1 --rm -p 12080:80 -v "/work/ApacheDocumentRoot1/:/usr/local/apache2/htdocs/" httpd $ docker run -d --name update_history2 --rm -p 13080:80 -v "/work/ApacheDocumentRoot2/:/usr/local/apache2/htdocs/" httpd

ブラウザに下記を指定すればどちらも参照できています。

http://192.168.100.52:12080/ http://192.168.100.52:13080/

この状態で、リバースプロキシを使用して、アクセス先のポートを変更しようとしています。
IPアドレスだけが指定されたら、ポート12080のコンテナへ接続
IPアドレスの後に/docが指定されたら、ポート13080のコンテナへ接続

プロキシサーバは下記のコマンドで実行しています

docker run --name reverse_proxy -v /home/hoge/reverse-proxy/nginx.conf:/etc/nginx/nginx.conf --rm -d -p 11080:80 nginx

nginx.confをこのように記述しました。

nginx.conf

1events { 2 worker_connections 8; 3} 4http { 5 server 6 listen 80; 7 server_name 192.168.100.52; 8 location / { 9 proxy_pass http://192.168.100.52:12080/; 10 proxy_redirect off; 11 } 12 } 13 server { 14 listen 80; 15 server_name 192.168.100.52; 16 location /doc { 17 proxy_pass http://192.168.100.52:13080/; 18 proxy_redirect off; 19 } 20 } 21}

192.168.1.52 で参照されたときは、ポート12080のコンテナに接続できます。

192.168.1.52/doc で参照されたときは、proxy_pass http://192.168.100.52:13080/;
に飛ぶようにはできないのでしょうか。

http://192.168.100.52/doc:11080 とアドレスバーに入力すると

nginx.confには何も指定がなかったかのように、http://192.168.100.52:80
が表示されました。

追記
ブラウザでの指定方法も間違っていました ポート番号を書く位置は、IPアドレス直後、ディレクトリを指定する前でした

http://192.168.100.52:11080/doc

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

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

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

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

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

guest

回答1

0

ベストアンサー

server ディレクティブを同じ server_name で複数定義しているため、最初に記述されたほうが優先されてしまいます。
ドメインやアクセス元のポート番号を分ける必要がないのであれば同じ server ディレクティブの中にまとめて記述するとうまくリバースプロキシできると思います。

nginx.conf

1events { 2 worker_connections 8; 3} 4http { 5 server 6 listen 80; 7 server_name 192.168.100.52; 8 9 location ^~ /doc { # 先頭一致条件を探し、一致すればその時点で評価を終了し、そのlocation ディレクティブを適用する 10 proxy_pass http://192.168.100.52:13080/; 11 proxy_redirect off; 12 } 13 14 location / { # 正規表現で一致するものがなかった場合に適用される 15 proxy_pass http://192.168.100.52:12080/; 16 proxy_redirect off; 17 } 18 } 19}

投稿2022/02/01 03:20

Sorarinu

総合スコア23

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

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

taro373

2022/02/01 04:12

ありがとうございました 動作しました!! 意味を理解せずにツギハギの知識で書いていました。 単純な振り分ける機能を実行したいので、この設定で“やりたいこと”が実現できました。 勉強になりました、ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問