Nginxでリバースプロキシの設定をしたらハマった

目次

概要

今回は、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が返ってきます。

あとがき

こういったまれにしかしないことが多い設定は、設定するたびに毎回調べている気がしますね…
そしてたいてい同じところでハマってることが多い気がします。

About

インフラエンジニア
インフラ系の技術を中心に紹介・解説しています。

お問い合わせはTwitter DMまで

Privacy Policy

About Me

Recommends

Archives