Пользовательская конфигурация расположения для каждого виртуального_ХОСТа без эффекта: 502 Bad Gateway
Я пытаюсь настроить докеризованный обратный прокси-сервер nginx, который должен снабжать докеризованный веб-сервер Gunicorn. Веб-сервер Gunicorn должен быть доступен через example.com/django
, поэтому я добавил пользовательские директивы nginx, как описано здесь: https://github.com/nginx-proxy/nginx-proxy/blob/main/README.md#per-virtual_host-location-configuration
Я поместил директивы в файл example.com_django
/www.example.com_django
. Однако они не приняты в основном конфигурационном файле nginx и, похоже, не имеют никакого эффекта. Веб-сайт недоступен и выдает ошибку 502 Bad Gateway
.
Файлы Docker Compose и пользовательский конфигурационный файл nginx приведены ниже.
Основные ресурсы, которые я использовал:
- https://testdriven.io/blog/dockerizing-django-with-postgres-gunicorn-and-nginx/#project-setup
- https://github.com/nginx-proxy/nginx-proxy/blob/main/README.md .
- https://docs.gunicorn.org/en/stable/deploy.html#nginx-configuration .
docker-compose.yml: NGINX Proxy
version: "3.9"
services:
nginx-proxy:
image: nginxproxy/nginx-proxy:alpine
container_name: nginx-proxy
volumes:
- conf:/etc/nginx/conf.d
- html:/usr/share/nginx/html
- dhparam:/etc/nginx/dhparam
- vhost:/etc/nginx/vhost.d:ro
- certs:/etc/nginx/certs:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
restart: always
networks:
- nginx-net
ports:
- 80:80
- 443:443
acme:
image: nginxproxy/acme-companion:latest
container_name: nginx-proxy-acme
depends_on:
- nginx-proxy
volumes:
- html:/usr/share/nginx/html
- conf:/etc/nginx/conf.d
- dhparam:/etc/nginx/dhparam
- vhost:/etc/nginx/vhost.d:ro
- certs:/etc/nginx/certs:rw
- acme:/etc/acme.sh
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- NGINX_PROXY_CONTAINER=nginx-proxy
- DEFAULT_EMAIL=account@domain.com
restart: always
networks:
- nginx-net
volumes:
conf:
certs:
html:
vhost:
dhparam:
acme:
networks:
nginx-net:
external: true
docker-compose.yml: Django Server
version: '3.8'
# Prod environment
services:
web:
build:
context: .
dockerfile: Dockerfile
command: gunicorn core.wsgi:application --forwarded-allow-ips="172.31.0.0/24,www.example.com,example.com" --bind 0.0.0.0:8083
expose:
- 8083
env_file:
- ./.env
environment:
- VIRTUAL_HOST=example.com,www.example.com
- VIRTUAL_PATH=/django
- LETSENCRYPT_HOST=example.com,www.examplecom
- LETSENCRYPT_EMAIL=account@domain.com
depends_on:
- db
networks:
- nginx-net
db:
image: postgis/postgis:15-3.3-alpine
env_file:
- ./.env
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_DB=${DB_NAME}
ports:
- ${DB_PORT_EXT}:${DB_PORT_INT}
volumes:
postgres_data:
networks:
nginx-net:
external: true
example.com_django / www.example.com_django в /etc/nginx/vhost.d
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme
proxy_set_header Host $http_host;
proxy_redirect off;