方法
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
+全パスでアクセスされました。
- この場合、nginx-02の
- 2〜5はproxy_passに
IP:PORT/hoge
のようにスラッシュ配下のパスまで設定しています( 2はhogeは空文字ととらえる )。- この場合、nginx-02の
IP:PORT/hoge
+ 部分パスでアクセスされました。
- この場合、nginx-02の
コマンド2の結果が項番2で//fukuoka
になったり、項番4で/japan/fukuoka/fukuoka
になったり、項番5で/america/fukuoka
になったりする挙動の説明がつきました。
まとめ
- proxy_passに
IP:PORT
のようにスラッシュ配下のパスを設定しない場合-
IP:PORT
+ 全パスが付与される
-
- proxy_passに
IP:PORT/hoge
のようにスラッシュ配下のパスまで設定した場合-
IP:PORT/hoge
+ 部分パスが付与される
-