Django login_required не работает с несколькими рабочими gunicorn
У меня есть проект, который содержит множество микросервисов, точкой входа является микросервис Django (с логином и аутентификацией пользователя).
Все остальные Apis обернуты декоратором @login_required от Django.
Я развернул его, используя ngnix, gunicorn внутри kubernetes pod.
Все отлично работает с 1 рабочим(sync), но я, очевидно, хочу несколько рабочих, поэтому, когда я увеличиваю количество рабочих и потоков(gthread), это не позволяет мне войти в систему, перенаправляя на login/?next=/login/5/.
Потратив некоторое время, я выяснил следующее:
- Поскольку значение по умолчанию keepalive рабочего составляет 2s, рабочий закрывает соединение и назначается новый рабочий; поскольку они не имеют общей памяти, моя session cookie не переносится. .
- Я попробовал увеличить время keepalive до 10s, теперь он позволяет мне войти, но если кто-то пытается войти, когда рабочий истекает (около 10s), то же самое, не входит и перенаправляет на
login/?next=/login/5/. - Другое направление, которое я нашел, было об исправлении secret key как в this post, но я просто использовал стандартное значение по умолчанию, которое я даже жестко закодировал в settings.py, но не повезло. Я прикреплю свой конфиг/логи gunicorn ниже:
Подскажите, что я делаю не так, не могу разобраться, заранее спасибо!