Перенаправление 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.