Проблема с перенаправлением Auth0/Nginx/Django после входа в систему с помощью прокси-сервера Nginx

Я использую nginx в качестве прокси для передачи моему контейнеру django app. Я могу успешно получить доступ к главному url, но когда он передает управление обратно к django app и логинится в django app контейнер дает ему локальный url и он не маршрутизирует обратно на правильную страницу.

Ури редиректа приходит как http://app

site-enabled

upstream app{
    server 0.0.0.0:8888;
}

server {
    listen 8080;
    server_name app-dev.company.net;

    location / {
        # django running in uWSGI
        proxy_pass http://app;
        include uwsgi_params;
        uwsgi_read_timeout 300s;
        client_max_body_size 320m;
        sendfile on;
        proxy_read_timeout 1800;
        proxy_connect_timeout 1800;
        proxy_send_timeout 1800;
        send_timeout 1800;
    }
}

docker-compose.yml

version: "3.9"   
services:
  app:
    image: ecr/app
    container_name: django_app
    ports:
      - 8888
    env_file:
      - dev.env
    volumes:
      - staticfiles:/opt/app/static/
  nginx:
    build: ./nginx
    container_name: django_app
    volumes:
      - staticfiles:/opt/app/static/
    ports:
      - 8080:8080
    depends_on:
      - app
volumes:
  staticfiles:

Ваш конфигурационный файл docker-compose / nginx полон мелких ошибок, которые могут вызвать подобную проблему - поэтому попробуем их устранить.

  • удалите имена контейнеров, если они не нужны. Так будет легче понять, как сделать ссылку из одного контейнера в другом.

  • Где находится ваш NGINX Dockerfile, который нужно сделать build ./nginx.

docker-compose

version: "3.9"   
services:
  app:
    image: ecr/app
    ports:
      - 8888
    env_file:
      - dev.env
    volumes:
      - staticfiles:/opt/app/static/
  nginx:
    build: ./nginx
    volumes:
      - staticfiles:/opt/app/static/
    ports:
      - 8080:8080
    depends_on:
      - app
volumes:
  staticfiles:

NGINX Configuration

  • Вы не можете использовать 0.0.0.0 в вашем блоке upstream. Обычно я использую имя сервиса. В вашем случае app. Поэтому, пожалуйста, измените его на server app:8888; и протестируйте еще раз.

  • Конфигурация местоположения

Вы проксируете http-трафик на ваш контейнер django app. Нет необходимости использовать uwsgi_read_timeout или include uwsgi_params. В вашем случае будет достаточно простой конфигурации http-прокси. Например, во всем том, что вы произвольно добавили в конфигурацию nginx, отсутствует одна важная конфигурация прокси.

 proxy_pass http://django_app;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header Host $host;
 proxy_redirect off;

Убедитесь, что вы понимаете директивы, которые вы используете в конфигурации NGINX, а также в файле docker-compose, очистите файлы конфигурации и попробуйте снова.

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