Django Nginx обратный прокси CSRF Cookie не установлен

Установка

Используя docker compose, я имею следующее:

Nginx Reverse Proxy <> Docker Django Application with React pages (:8000)

В моем Nginx Reverse Proxy, конфигурация под conf.d следующая:

server {

    listen 80;
    server_name localhost;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Cookie $http_cookie;
        proxy_pass http://frontend:8000;
    }

}

В моем Django приложении у меня есть представление, которое устанавливает CSRF токен следующим образом views.py:

@method_decorator(ensure_csrf_cookie, name='dispatch')`

class GetCSRFToken(APIView): ...

На реакт-страницах моего приложения Django я использую Axios для вызова:

axios.get('http://localhost:8000/csrf_cookie').then(...)

Это получает мой CSRF-токен и сохраняет его как cookie на странице React.

Проблема

Перед развертыванием обратного прокси nginx, при доступе к приложению через localhost:8000, CSRF токен устанавливается, когда я делаю вызов axios к вышеуказанному представлению и все работает.

Однако, после развертывания обратного прокси nginx, при доступе к приложению через localhost токен CSRF не устанавливается когда я вызываю вышеуказанное представление.

Еще одно наблюдение: при настроенном обратном прокси nginx, если я посещаю localhost:8000 напрямую и вызываю оттуда axios, CSRF-токен устанавливается .

Похоже, это проблема с обратным прокси. Я могу заставить куки установить значение localhost:8000 только при прямом посещении localhost:8000.

Но когда я посещаю localhost:8000 через обратный прокси с localhost, CSRF-токен не установлен.

Пожалуйста, посоветуйте, как решить эту ошибку. Большое спасибо!

Моя установка docker-compose:

version: "3"
   
services:
  nginx:
    image: nginx:latest
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./nginx/app.conf:/etc/nginx/conf.d/default.conf
  db:
    image: postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    depends_on:
      - nginx
  frontend:
    build: ./frontend
    command: >
      sh -c "python manage.py makemigrations frontendApp &&
             python manage.py makemigrations &&
             python manage.py migrate &&
             python manage.py runserver 0.0.0.0:8000"
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    environment:
      - POSTGRES_NAME=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    depends_on:
      - db
Вернуться на верх