きっかけ
家のwifiルーターを変えたら自宅で使ってるウェブアプリが使えなくなった・・・
1. 発生した問題と状況
- 症状:
NGINX 経由でアクセスすると、トップページはNginxのデフォルトページ。それ以外のリクエストで 404 エラーが返され、アプリが正常に動作しなかった。 - 原因の推測:
NGINX のリバースプロキシ設定に誤りがあり、サーバ名(server_name)が正しく設定されていなかったため、正しいバックエンド(Gunicorn 経由の Flask アプリ)にリクエストが転送されていなかった。
2. 分析と確認事項
- Nginx の設定:
次に示す通りで、設定ファイルのサーバ名が誤っていたため、意図したバックエンドにリクエストが流れていなかったっぽい。 - 設定の反映:
設定変更後にも不具合が続いて悩んでいた。 Nginx を再起動またはリロードしないと、変更が反映されず、以前の設定のまま動作してしまうことに気づいていなかった・・・。
3. 具体的な修正内容とコード例
(1) Nginx リバースプロキシ設定の修正
修正前 (例):
誤ったサーバ名が設定されていた場合
server {
listen 80;
server_name 旧サーバ名; # 誤ったサーバ名
location / {
proxy_pass http://unix:/opt/coffee_receipe_generator/coffee_receipe_generator.sock;
include proxy_params;
}
}
修正後:
server {
listen 80;
server_name 192.168.x.xxx; # 正しいサーバ名に修正
location / {
proxy_pass http://unix:/opt/coffee_receipe_generator/coffee_receipe_generator.sock;
include proxy_params;
}
}
この修正により、Nginx が正しいサーバ名でリクエストを受け、適切な UNIX ソケットに転送できるようになるはずだった。
(2) Nginx の設定変更後の反映
しかしながら設定ファイルを修正しただけでは、Nginx は古い設定のまま動作していた。そのため、以下のコマンドで設定変更を反映させる必要があった・・・。
sudo nginx -t # 設定ファイルの構文チェック
sudo systemctl reload nginx # Nginx の設定リロードまたは再起動
Nginx が新しい設定内容(正しいサーバ名など)を読み込み、リバースプロキシとして正しく動作するようになった!
4. 一連の学び
- リバースプロキシ設定の重要性:
サーバ名などの設定が、バックエンドへのリクエスト転送に影響する。ネットワークに変更を加えた際には設定見直しが必須。 - 設定変更後の再起動・リロード:
Nginx は設定変更を即座に反映しないため、設定修正後は必ずnginx -t
で構文チェックし、systemctl reload nginx
もしくはsystemctl restart nginx
を実行する必要がある。