LoginSignup
3
3

More than 5 years have passed since last update.

nginxのproxy_passの挙動を整理しよう

Last updated at Posted at 2019-01-17

方法

nginxを2つ起動します( nginx-01, nginx-02 )。
nginx-01へのアクセスをnginx-02に振り分けるようproxy_passを設定します。

nginxコンテナを2つ起動する

$ sudo docker run --name nginx-01 -d -p 8081:80 nginx:latest
$ sudo docker run --name nginx-02 -d -p 8082:80 nginx:latest

nginx-02のコンテナのIPアドレスを確認する

$ sudo docker inspect nginx-02 | grep IPAddress
            "IPAddress": "172.17.0.3",
$

nginx-01の設定にnginx-02へのproxy_passを追加する

{設定値}はnginx-02への様々なパスで試そう(後述)

    location /japan {
        proxy_pass {設定値}
    }

設定変更・反映コマンド

$ sudo docker cp nginx-01:/etc/nginx/conf.d/default.conf .
$ vim default.conf
$ sudo docker cp default.conf nginx-01:/etc/nginx/conf.d/defalt.conf
$ sudo docker restart nginx-01

結果

以下コマンドを叩いてnginx-01にアクセスした際のnginx-02のログを記載します。

  • コマンド1 : curl localhost:8081/japan
  • コマンド2 : curl localhost:8081/japan/fukuoka

nginx02ログ

項番 proxy_pass 設定値 コマンド1実行時 コマンド2実行時
1 http://172.17.0.3 GET /japan GET /japan/fukuoka
2 http://172.17.0.3/ GET / GET //fukuoka
3 http://172.17.0.3/japan GET /japan GET /japan/fukuoka
4 http://172.17.0.3/japan/fukuoka GET /japan/fukuoka GET /japan/fukuoka/fukuoka
5 http://172.17.0.3/america GET /america GET /america/fukuoka

1だけ特別で2〜5は同じ法則で動作しました。

  • 1はproxy_passにIP:PORTのようにスラッシュ配下のパスを設定していません。
    • この場合、nginx-02のIP:PORT+全パスでアクセスされました。
  • 2〜5はproxy_passにIP:PORT/hogeのようにスラッシュ配下のパスまで設定しています( 2はhogeは空文字ととらえる )。
    • この場合、nginx-02のIP:PORT/hoge + 部分パスでアクセスされました。

コマンド2の結果が項番2で//fukuokaになったり、項番4で/japan/fukuoka/fukuokaになったり、項番5で/america/fukuokaになったりする挙動の説明がつきました。

まとめ

  • proxy_passにIP:PORTのようにスラッシュ配下のパスを設定しない場合
    • IP:PORT + 全パスが付与される
  • proxy_passにIP:PORT/hogeのようにスラッシュ配下のパスまで設定した場合
    • IP:PORT/hoge + 部分パスが付与される
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3