mutoxu-N
@mutoxu-N

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

nginxのリバースプロキシでルーティング優先順位が理解できない

解決したいこと

nginxで, WANからアクセスしたときにはhttpsにリダイレクトし, LANからアクセスしたときには8080ポートに転送するようなリバースプロキシを作っています.

ここでLANから/sub/にアクセスすると8080番ポートに転送され, location /sub/ {} が実行されるのですが, WANから /sub/にアクセスすると location / {} が実行されて, HTTPSにリダイレクトされます.
私は, WANからのアクセスも最長一致の location /sub/ {} で処理されて https://google.com/ にリダイレクトされると考えているのですが, location / {} が実行されるのか理解できません.

つまり, location /sub/ {} 内のif文を削除しても, WANから/sub/のプロキシに接続できない状態が保たれるのか否かを教えていただけると幸いです.


※注釈
/sub/以外の作成をするときに, 毎回if文を入力するのが美しくないと感じているので, 不必要ならカットしたいです. しかし安易にカットすると, 特定のケースでアクセスできてしまうことがあるかもしれないので, 質問させていただきました.

該当するソースコード

geo $client_location {
    192.168.0.0/16 lan;
    default wan;
}

server {
    server_name _;

    listen 80;
    listen [::]:80;

    location ^~ /.well-known {
        root /dist/;
    }

    location / {
        if ($client_location = "wan") {
            return 301 https://$host$request_uri;
        }

        root /dist/lan;
        index /index.html;
    }


    location /sub/ {
        if ($client_location = "wan") {
            return 301 https://google.com/;
        }
        proxy_pass http://host.docker.internal:8080/;
    }
}
0

1Answer

WANから /sub/にアクセスすると location / {} が実行されて

URL末尾が /sub になっているなど何か間違っていませんか?
LAN, WANの判定は location の中なのでその手前でアクセス元ごとに挙動が変わることは無いと思います。

0Like

Comments

  1. @mutoxu-N

    Questioner

    回答有り難うございます!そうなってました!
    解決したためクローズにしていたのですが, 非表示になっていなかったみたいです...
    すいません!

Your answer might help someone💌