Сервис Docker nginx не может связаться с сервисом Django и возвращает Bad Request 400

Мой Docker-контейнер nginx не может взаимодействовать с моим контейнером приложения Django WSGI. Он работает локально, но когда я развертываю его на Linode, я получаю Bad Request (400)

Структура проекта

Project
─ Dockerfile
─ docker-compose.yml
─ entrypoint.sh

└── app
 ── wsgi.py
 ── settings.py
 ── urls.py
 ── <other django apps>

└── nginx
 ── Dockerfile
 ── nginx.conf

docker-compose.yml:

version: '3.3'

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    command: gunicorn app.wsgi:application --bind 0.0.0.0:8000
    expose:
      - 8000
    env_file:
      - ./.env
    depends_on:
      - db
  db:
    image: postgres:12.0-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    env_file:
      - ./.env.db
  nginx:
    build: ./nginx
    volumes:
      - static_volume:/var/www/app/staticfiles
      - media_volume:/var/www/app/mediafiles
    ports:
      - 80:80
    depends_on:
      - web


volumes:
  postgres_data:

nginx/Dockerfile

FROM nginx:1.17.4-alpine

RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d

nginx/nginx.conf

upstream polls_django {
    server web:8000;
}

server {

    listen 80;

    location / {
        proxy_pass http://polls_django;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

}

Ключи:

  1. Локально: Я могу посетить свое приложение на localhost просто отлично. Однако я заметил, что при попытке посетить 0.0.0.0.0.

    я получаю Bad Request (400).
  2. Linode: При посещении IP-адреса моего Linode я получаю Bad Request (400). Просматривая журналы ошибок моего контейнера nginx, я заметил следующую запись:

2022/11/28 01:08:51 [info] 7#7: *2 client timed out (110: Operation timed out) while waiting for request, client: 12.34.56.78, server: 0.0.0.0:80

Похоже, что запрос к серверу никогда не попадает в приложение WSGI

  1. Linode: Я получил shell в свой контейнер nginx, запущенный docker exec -it nginx /bin/sh и заметил, что я могу вызвать curl 127.0.0.1 и получить ожидаемый ответ. Я чувствую, что это означает, что что-то не так с моим nginx.conf then
  2. .

У кого-нибудь есть подсказки, которые я могу попробовать?

Для справки: Я прошел через это руководство (https://testdriven.io/blog/dockerizing-django-with-postgres-gunicorn-and-nginx/) Код, который я выполняю: https://github.com/drivelous/docker-ubuntu18.04-django3.0.2

Вернуться на верх