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/;
}
}