目次
概要
今回は、Nginxでリバースプロキシの設定をした際にハマった点があったので簡単に紹介します。
事象
ミラーサーバーの提供にはロードバランサとしてNginxのリバースプロキシを設定して利用しています。
サポートするディストリビューションを追加するため、既存のリバースプロキシの設定を複製する形で設定を追記しました。
しかし、既存の設定は機能するにもかかわらず、追記した設定は機能しない問題が発生しました。
追記した設定は以下です。
location /ubuntu {
proxy_pass http://192.168.x.y:80;
}
location /almalinux {
proxy_pass http://192.168.x.z:80;
}
/ubuntu
パスについては正しくリバースプロキシ先のHTTPサーバーの情報を返してくれますが、/almalinux
パスは404となりアクセスができませんでした。
もちろんリバースプロキシ先のHTTPサーバが起動していないなどはなく、直接アクセスし正しく機能していることが確認できます。
# curl -s -o /dev/null -w '%{http_code}\n' http://192.168.x.x/ubuntu
200
# curl -s -o /dev/null -w '%{http_code}\n' http://192.168.x.x/almalinux
404
# curl -s -o /dev/null -w '%{http_code}\n' http://192.168.x.z/
200
正しい設定
Nginxでリバースプロキシを設定する際は、 locationとproxy_passに設定するパスの末尾を必ず /
で終了させる必要があります。
上記設定を正しいものに直すと次のようになります。
location /ubuntu/ {
proxy_pass http://192.168.x.y:80/;
}
location /almalinux/ {
proxy_pass http://192.168.x.z:80/;
}
なぜ一部設定は機能していたのか
Ubuntuのアーカイブリポジトリには/ubuntuへのシンボリックリンクが入っています。
このため、元の設定では http://192.168.x.x/ubuntu
へアクセスすると http://192.168.x.y/ubuntu
へリバースプロキシされ、シンボリックリンクを参照したことでリポジトリのルートディレクトリを参照できている状況だったようです。
実際、AlmaLinuxのリポジトリを参照すると、 /almalinux
へのシンボリックリンクはないことが確認できます。
このため、 http://192.168.x.x/almalinux
へアクセスすると http://192.168.x.z/almalinux
へリバースプロキシされ、このファイルは存在しないため404が返ってきます。
あとがき
こういったまれにしかしないことが多い設定は、設定するたびに毎回調べている気がしますね…
そしてたいてい同じところでハマってることが多い気がします。