Назад | Перейти на главную страницу

502 Плохой шлюз - nginx, uwsgi + django в отдельных контейнерах докеров

Мне сложно определить, почему nginx и uwsgi не работают для обслуживания моего приложения django. Вот проблема из журнала nginx.

    nginx-01: 2015/12/06 07:47:50 [error] 10#0: *1 connect() failed (111: Connection refused) while connecting to upstream, 
client: xxx.xxx.xxx.xxx, server: , request: "GET / HTTP/1.1", upstream: "uwsgi://0.0.0.0:8001", host: "54.252.197.191"

Итак, uwsgi и django находятся в одном контейнере со следующими настройками файлов.

[uwsgi]
http-socket = :8001
chdir = %dsrc/myproject/
env = DJANGO_SETTINGS_MODULE=myproject.settings
module = myproject.wsgi:application
master = true
processes = 4

Мой файл докеров запускает uwsgi, и я открываю порт 8001 хосту

CMD ["uwsgi", "uwsgi.ini"]

Мой второй контейнер для nginx имеет следующие настройки виртуального хоста nginx.

upstream uwsgi_django {
    server 0.0.0.0:8001;
}

server {
    listen 80;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    location / {
        auth_basic "Restricted";
        auth_basic_user_file /etc/nginx/.htpasswd;
        uwsgi_pass uwsgi_django;
        include /etc/nginx/uwsgi_params;
    }

    location = /favicon.ico {
      log_not_found off;
    }
}

Вот мои контейнеры от docker ps.

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                      NAMES                                       
16f181bafb61        ccbf828a3ab2        "nginx -g 'daemon off"   7 minutes ago       Up 7 minutes        0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   nginx-container                             
33d4d5d17ca3        65ad56e6756c        "uwsgi uwsgi.ini"        13 minutes ago      Up 13 minutes       0.0.0.0:8001->8001/tcp                     django-container                            
688f4b0f9e29        postgres            "/docker-entrypoint.s"   7 hours ago         Up About an hour    0.0.0.0:5432->5432/tcp                     postgres-container   

Если я скручиваю 0.0.0.0:8001 с хост-машины, я возвращаюсь на страницу приветствия для проекта django. Однако, если я попытаюсь просмотреть его из браузера, я получу ошибку 502 плохого шлюза (что, на мой взгляд, кажется, что ссылка ive настроила uwsgi правильно, но есть некоторая проблема между nginx, связывающимся с uwsgi.

Вот твоя проблема:

upstream uwsgi_django {
    server 0.0.0.0:8001;
}

Это «работает» только в том случае, если процессы находятся на одном хосте, виртуальной машине или контейнере, потому что он пытается установить соединение с одним и тем же компьютером. Когда они находятся в разных контейнерах, это не работает.

Вам необходимо изменить конфигурацию nginx так, чтобы он использовал внутренний IP-адрес контейнера uwsgi. Как вы это делаете, зависит от того, как вы создаете свои контейнеры, которые вы не указали. Ознакомьтесь с соответствующей документацией.