Nginx: восходящее соединение преждевременно закрыто при чтении заголовка ответа из восходящего потока

#node.js #docker #express #nginx #bcrypt

#node.js #docker #выразить #nginx #bcrypt

Вопрос:

У меня есть экспресс-API, доступный через обратный прокси nginx. Все работает нормально, за исключением одного обработчика, который использует bcrypt.

Моя конфигурация api nginx:

 server {
listen 443 ssl;
listen [::]:443 ssl;
server_name api.dev;

ssl_certificate /root/ssl/cert.crt;
ssl_certificate_key /root/ssl/cert.key;

access_log /root/nginx_logs/api_access.log;
error_log /root/nginx_logs/api_error.log;

location / {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header Host $host;
    proxy_pass http://api:8880;

    # Big timeout to test
    proxy_connect_timeout 1200s;
    proxy_send_timeout 1200s;
    proxy_read_timeout 1200s;
}
}
  

Мой экспресс-обработчик:

 try {
    const hashedPassword = await bcrypt.hash(payload.password, 10);
    return handlerResult.ok({});
} catch (err) {
    console.error(err);
}
  

Когда я запрашиваю свой api по любому другому маршруту, это работает, но с этим обработчиком nginx выдает эту ошибку:

 [error] 29#29: *27 upstream prematurely closed connection while reading response header from upstream
  

Если я прокомментирую const hashedPassword = await bcrypt.hash(payload.password, 10); , ошибка исчезнет.

Вначале я подумал, что это ошибка тайм-аута, но, как вы можете видеть, я написал overkill timeout в nginx.

Спасибо, что прочитали, если у вас есть какие-либо вопросы, пожалуйста, задайте мне 🙂

PS: Извините за мой плохой английский

Ответ №1:

На самом деле я исправил, используя bcryptjs вместо bcrypt!

Комментарии:

1. просматривая весь Интернет, ваш вопрос указывает мне правильное направление!