Сервис 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;
}
}
Ключи:
Локально: Я могу посетить свое приложение на localhost просто отлично. Однако я заметил, что при попытке посетить 0.0.0.0.0.
я получаю Bad Request (400).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
- Linode: Я получил shell в свой контейнер nginx, запущенный
docker exec -it nginx /bin/sh
и заметил, что я могу вызватьcurl 127.0.0.1
и получить ожидаемый ответ. Я чувствую, что это означает, что что-то не так с моимnginx.conf
then .
У кого-нибудь есть подсказки, которые я могу попробовать?
Для справки: Я прошел через это руководство (https://testdriven.io/blog/dockerizing-django-with-postgres-gunicorn-and-nginx/) Код, который я выполняю: https://github.com/drivelous/docker-ubuntu18.04-django3.0.2