让我们整理一下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 + 部分パスが付与される

广告
将在 10 秒后关闭
bannerAds