1. 状況確認 • curl -I http://127.0.0.1/healthz がエラー • docker compose exec nginx ls -l /etc/nginx/conf.d で設定ファイルが存在しないことを確認 → コンテナに Nginx 設定ファイルが反映されていない状態だった
  2. ホスト側に設定ファイルを用意

ホストの nginx/conf.d/ ディレクトリに新規ファイルを作成:

mkdir -p nginx/conf.d

cat > nginx/conf.d/django.conf <<'NGINX'
server {
    listen 80 default_server;
    server_name style-log.com www.style-log.com _;

    location / {
        proxy_pass         <http://django:8000>;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;

        client_max_body_size 20m;
        proxy_read_timeout 300;
    }

    location = /healthz { return 200; }
}
NGINX

  1. docker-compose のボリュームを修正

docker-compose.prod.yml の nginx サービスに設定ディレクトリをマウント:

services:
  nginx:
    image: nginx:1.27-alpine
    volumes:
      **- ./nginx/conf.d:/etc/nginx/conf.d:ro**
    ports:
      - "80:80"

  1. Nginx を再作成・再起動
docker compose -f docker-compose.prod.yml up -d --force-recreate nginx

  1. 設定テストとリロード
docker compose -f docker-compose.prod.yml exec nginx nginx -t
docker compose -f docker-compose.prod.yml exec nginx nginx -s reload

→ syntax is ok / test is successful が出れば成功

  1. 動作確認

設定ファイルの存在を確認

docker compose -f docker-compose.prod.yml exec nginx sh -lc \\
 'ls -l /etc/nginx/conf.d && echo "-----" && cat -n /etc/nginx/conf.d/django.conf'

ヘルスチェック

curl -I http://127.0.0.1/healthz

→ 200 OK が返ることを確認 その後、ブラウザで http://style-log.com にアクセスし Django が応答することを確認

✅ 今回の改修ポイント

  1. 設定ファイルをホストに配置 → コンテナにマウント → コンテナ再作成で反映される
  2. nginx.conf → /etc/nginx/conf.d/*.conf を利用 → Docker 公式イメージの標準的なやり方
  3. healthz エンドポイントで疎通確認 → アプリの死活監視にも使える

これで Nginx → Django のリバースプロキシ構成 が正しく動作しました 🎉

追記以下に変更