Вопрос или проблема
Сервер на nodejs (запускается через pm2). Всё работает отлично, пользователи не жалуются, но по какой-то причине в error.log nginx каждые 5-10 секунд появляются следующие ошибки:
2024/10/05 16:55:56 [error] 247972#247972: *42617938 connect() failed (111: Connection refused) while connecting to upstream, client: 172.68.&&&.&&&, server: &&&&&.net, request: "POST /api/banners HTTP/2.0", upstream: "http://127.0.0.1:3000/api/banners", host: "&&&&&.net", referrer: "https://&&&&&.net/mining/mining"
Я в замешательстве. Не знаю, с чем это может быть связано. У меня всё работает идеально, и у пользователей тоже. У меня нет идеи, почему возникают эти ошибки.
server {
listen 80;
listen [::]:80;
server_name &&&&&.net www.&&&&&.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 &&&&&.net www.&&&&&.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;
}
}
Звучит неуместно, но я думал, что смогу поймать эту ошибку, перезагружая страницу множество раз. В результате у меня не было никаких ошибок.
Я готов предоставить всю необходимую информацию, просто помогите, пожалуйста =)
Похоже, что есть проблема с портом 3000, проверили ли вы, что порт привязан на сервере?
Ответ или решение
Проблема, которую вы описываете, судя по сообщениям в журнале ошибок Nginx, связана с тем, что ваш Nginx-сервер не может установить соединение с приложением Node.js, работающим на порту 3000. Сообщение об ошибке "111: Connection refused" указывает на то, что сервер не может подключиться к указанному адресу и порту.
Возможные причины и пути решения:
-
Проверка работы Node.js приложения:
- Убедитесь, что ваше приложение на Node.js запущено и слушает на порту 3000. Вы можете использовать команду:
netstat -tuln | grep 3000
Это позволит вам проверить, занят ли порт 3000 и какое приложение его использует.
- Убедитесь, что ваше приложение на Node.js запущено и слушает на порту 3000. Вы можете использовать команду:
-
Настройка PM2:
- Если вы используете PM2 для управления вашим приложением, убедитесь, что оно действительно работает и не перезапускается часто из-за ошибок. Проверьте статус вашего процесса с помощью команды:
pm2 list
Также вы можете посмотреть журналы вашего приложения, чтобы выявить возможные ошибки:
pm2 logs <имя_приложения>
- Если вы используете PM2 для управления вашим приложением, убедитесь, что оно действительно работает и не перезапускается часто из-за ошибок. Проверьте статус вашего процесса с помощью команды:
-
Проверка конфигурации Nginx:
- Убедитесь, что конфигурация Nginx правильная и что запросы на
/api/banners
действительно должны направляться на ваше Node.js приложение. Можно проверить это, добавив временные логи для отладки.
- Убедитесь, что конфигурация Nginx правильная и что запросы на
-
Параллельные запросы:
- Если ваше Node.js приложение не справляется с высокой нагрузкой или слишком большим числом параллельных соединений, это может вызывать проблемы. Рассмотрите возможность оптимизации производительности приложения или использования балансировщика нагрузки, если запросы действительно высокие.
-
Проблемы с сетью:
- Убедитесь, что нет сетевых проблем, которые могут мешать соединению между Nginx и вашим приложением. Это может быть связано с брандмауэром или другими сетевыми настройками.
-
Файлы конфигурации:
- Убедитесь, что ваш файл конфигурации Nginx корректно настроен и не содержит опечаток. Например, в вашем примере конфигурации используется
proxy_pass http://localhost:3000;
. Если ваше приложение запускается на другом IP или порту, измените настройку соответственно.
- Убедитесь, что ваш файл конфигурации Nginx корректно настроен и не содержит опечаток. Например, в вашем примере конфигурации используется
Проверка и отладка:
- Попробуйте выполнить загрузочный тест на ваше приложение, чтобы увидеть, как оно реагирует на нагрузку. Используйте инструменты вроде Apache Benchmark или JMeter.
- Проверьте, происходят ли ошибки только в определённое время, например, когда вы ожидаете пиковых нагрузок.
Если после выполнения всех вышеперечисленных шагов проблема останется, предоставьте дополнительную информацию о вашем приложении, версиях используемого ПО и настройках, чтобы мы могли предложить более глубокий анализ.