Перенаправление AWS w/nginx на контейнеры docker; получение плохого шлюза 502

Настройка представляет собой экземпляр RHEL AWS. На этом экземпляре установлен и работает nginx. Это означает, что если я перейду по адресу http://[root], я получу html в папке nginx, как и должно быть. Если я перейду по адресу http://[root]/[sub1], я также получу другой html в папке nginx, как и предполагалось.

Теперь, http://[root]/[sub2] - это сервер django в контейнере docker. При запуске сервера, приложение django прослушивает http://127.0.0.1:8000. Мой контейнер docker переводит :38000->:8000 через docker-compose.yml. Мой файл nginx.conf выглядит следующим образом:

server {
    listen 80;
    root /usr/share/nginx/html;

    location / {}

    location /test {
        index text.html;
        alias /usr/share/nginx/html;
    }

    location /mod {
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_redirect off;
        proxy_pass http://127.0.0.1:38000;
    }
}

В то время как корень и /test (sub1) работают, когда я перехожу к /mod (sub2), я получаю 502 Bad Gateway.

Мой docker-compose.yml (версия 2) содержит ports: 38000:8000. Когда я создаю контейнер, я использую docker-compose run --name mod mod.

Есть предложения?

Для корректной работы необходимо было исправить две вещи. Во-первых, proxy_pass должен был быть 'http://localhost:38000', и во-вторых, мне нужно было запустить приложение django, чтобы оно слушало 0:8000 (т.е. python manage.py runserver 0:8000).

Использование только 'runserver' или 'runserver 0.0.0.0:8000' не позволяло nginx отправлять данные в контейнер docker.

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