Веб-сервер с NGINX, Gunicorn (с рабочими > 1) и Djagno не может сохранить JWT в cookie на стороне сервера
У меня есть WSGI Django приложение, с Gunicorn до него и Nginx в качестве веб-сервера. Django-приложение представляет собой Stateless DRF API.
Связанные с Django конфиги
REST_AUTH = {
'USE_JWT': True,
'JWT_AUTH_COOKIE': 'wird-jwt-auth',
'JWT_AUTH_REFRESH_COOKIE': 'wird-jwt-refresh',
'JWT_AUTH_RETURN_EXPIRATION': True,
'JWT_AUTH_HTTPONLY': False,
"SESSION_LOGIN": False,
"USER_DETAILS_SERIALIZER": "core.serializers.PersonSerializer",
"PASSWORD_RESET_SERIALIZER": "core.util_classes.PasswordResetSerializer"
}
SECURE_HSTS_PRELOAD = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
SECURE_HSTS_SECONDS = 2_592_000
SECURE_REFERRER_POLICY = "strict-origin-when-cross-origin"
# Application definition
SECURE_BROWSER_XSS_FILTER = True
SECURE_CONTENT_TYPE_NOSNIFF = True
X_FRAME_OPTIONS = 'DENY'
PERMISSIONS_POLICY = {"fullscreen": "*", }
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
"django.contrib.postgres",
'member_panel.apps.StudentConfig',
'admin_panel.apps.AdminPanelConfig',
'core.apps.CoreConfig',
'rest_framework',
"rest_framework.authtoken",
'django.contrib.sites',
'allauth',
'allauth.account',
'dj_rest_auth.registration',
'django_filters',
'corsheaders',
'polymorphic',
'drf_yasg',
"cachalot",
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
"django_permissions_policy.PermissionsPolicyMiddleware",
'django.middleware.locale.LocaleMiddleware',
'allauth.account.middleware.AccountMiddleware',
]
Конфиги Nginx
upstream app {
server localhost:8200;
}
server {
server_name .;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://app;
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_redirect off;
}
location /static/ {
alias .;
try_files $uri $uri/ =404;
}
location /media/ {
alias .;
try_files $uri $uri/ =404;
}
listen 443 ssl; # managed by Certbot
# ssl files
}
Когда рабочих у Gunicorn >1, JWT-токен, который я сохраняю на стороне клиента, исчезает после первого обновления. Когда workers=1, все нормально, без изменения других конфигураций.
В чем может быть проблема?