Что может быть причиной ошибки "111: Connection refused" в Nginx?

У меня есть сервер на Node.js, который я запускаю с помощью PM2. Все функционирует нормально, и пользователи не жалуются, однако в журнале ошибок nginx (error.log) каждые 5-10 секунд появляются следующие сообщения: <br/><br/><pre><code>2024/10/05 16:55:56 [error] 247972#247972: *42617938 connect() failed (111: Connection refused) while connecting to upstream, client: 172.68.&amp;&amp;&amp;.&amp;&amp;&amp;, server: &amp;&amp;&amp;&amp;&amp;.net, request: "POST /api/banners HTTP/2.0", upstream: "http://127.0.0.1:3000/api/banners", host: "&amp;&amp;&amp;&amp;&amp;.net", referrer: "https://&amp;&amp;&amp;&amp;&amp;.net/mining/mining"</code></pre> <br/><br/> Я не понимаю, с чем это связано. Хотя у меня всё работает хорошо, и другие пользователи не испытывают проблем, ошибки всё равно продолжают появляться в журнале. <br/><br/><pre><code>server {
    listen 80;
    listen [::]:80;

    server_name &amp;&amp;&amp;&amp;&amp;.net www.&amp;&amp;&amp;&amp;&amp;.net;

    return 302 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    ssl_certificate /etc/ssl/cert.pem;
    ssl_certificate_key /etc/ssl/key.pem;

    server_name &amp;&amp;&amp;&amp;&amp;.net www.&amp;&amp;&amp;&amp;&amp;.net;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}</code></pre> <br/><br/> Готов предоставить любую дополнительную информацию, если это необходимо.
  • 6 октября 2024 г. 16:45
Ответы на вопрос 1
Ошибка "111: Connection refused" в Nginx указывает на то, что Nginx не смог установить соединение с upstream-сервером (в вашем случае, это Node.js приложение, работающее на порту 3000). Эта проблема может возникнуть по нескольким причинам:

1. **Node.js приложение не запущено**: Убедитесь, что ваше приложение действительно работает и слушает на порту 3000. Вы можете это проверить, выполнив команду `pm2 list` для просмотра состояния процессов, управляемых PM2. 

2. **Приложение не слушает на `127.0.0.1`:** Если ваше Node.js приложение настроено на прослушивание не на `localhost` или `127.0.0.1`, а, например, на `0.0.0.0`, Nginx не сможет к нему подключиться по адресу `127.0.0.1:3000`. Проверьте конфигурацию вашего приложения и убедитесь, что оно слушает на правильном адресе.

3. **Приложение завершает работу и перезапускается**: Если приложение быстро завершается (например, из-за ошибок в коде), Nginx будет пытаться подключиться к нему каждый раз, когда приходит новый запрос, и будет выдавать ошибку при каждом неудачном подключении. Проверьте логи вашего приложения (например, через PM2: `pm2 logs <your-app-name>`), чтобы увидеть, есть ли какие-либо ошибки.

4. **Сетевые проблемы или ограничения**: Убедитесь, что между Nginx и вашим приложением нет сетевых проблем. Проверьте настройки брандмауэра или SELinux, если он включен, чтобы убедиться, что они не блокируют соединения.

5. **Ошибки в конфигурации Nginx**: Убедитесь, что конфигурация Nginx корректно указана. Ниже приведен пример конфигурации, который вы предоставили, и он выглядит нормально. Однако всегда стоит проверить на наличие синтаксических ошибок.

Вот несколько дополнительных рекомендаций:

- Проверьте логи вашего Node.js приложения, чтобы удостовериться, что оно загружается успешно и нет критических ошибок.
- Попробуйте запустить ваше приложение в режиме отладки, если это возможно, чтобы увидеть, не возникают ли ошибки при инициализации.
- Если у вас есть другие сервисы или прокси, попробуйте временно отключить их, чтобы диагностировать проблему.

Если проблема сохраняется после проверки всех этих моментов, попробуйте собрать дополнительную информацию о конфигурации вашего Node.js приложения и текущих системных ресурсах (например, с помощью `top` или `htop`).
Похожие вопросы