让我们整理一下nginx的proxy_pass行为
解决办法
将nginx启动两次(nginx-01, nginx-02)。
设置proxy_pass,将对nginx-01的访问转发到nginx-02。
启动两个nginx容器
$ 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実行時1http://172.17.0.3GET /japanGET /japan/fukuoka2http://172.17.0.3/GET /GET //fukuoka3http://172.17.0.3/japanGET /japanGET /japan/fukuoka4http://172.17.0.3/japan/fukuokaGET /japan/fukuokaGET /japan/fukuoka/fukuoka5http://172.17.0.3/americaGET /americaGET /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 + 部分パスが付与される