`504 Gateway Time-out` при отправке писем с Djoser и Django в продакшене

Я столкнулся с проблемой в своей производственной среде Django при использовании Djoser для регистрации пользователей и управления логинами. Когда пользователь запрашивает создание учетной записи, API занимает около минуты, а затем возвращает ошибку 504 Gateway Time-out. В моей локальной среде процесс работает корректно, и письмо с активацией отправляется без проблем.

Что я пробовал:

  1. Увеличение опций таймаута в Nginx. (без эффекта)

    server {
        listen ${LISTEN_PORT};
    
        location /static {
            alias /vol/web/static;
        }
    
    
        location / {
            uwsgi_pass              ${APP_HOST}:${APP_PORT};
            include                 /etc/nginx/uwsgi_params;
            client_max_body_size    10M;
    
            # new code
            uwsgi_read_timeout        120; 
            proxy_read_timeout       300s;
            proxy_connect_timeout    300s;
            proxy_send_timeout       300s;
        }
    }
    
  2. Добавлены логи в функцию отправки электронной почты, и функция, похоже, вызывается правильно.

    class ActivationEmail(email.ActivationEmail):
        template_name = "user/email/activation.html"
    
        def send(self, to, *args, **kwargs):
            print(f"Sending activation mail to {to}")
            try:
                super().send(to, *args, **kwargs)
            except:
                print(f"Couldn't send mail to {to}")
                raise
            print(f"Activation mail sent successfully to {to}")
    

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

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

Вопрос:

Что может быть причиной ошибки 504 при отправке электронной почты в производстве? Есть ли дополнительные конфигурации, которые я должен проверить в Nginx или в настройках электронной почты? Как я могу диагностировать и решить эту проблему?

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