リバースプロキシ設定の見直し:NGINXサーバーで404エラーを解消した事例


きっかけ

家の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 を実行する必要がある。

, ,