Вопрос или проблема
Я пытаюсь разместить свой веб-сайт в первый раз, и похоже, что NGINX не распознает мой серверный компонент. Я пытался настроить местоположение API в NGINX, чтобы он распознавал все API и отправлял на порт 5000, но это не сработало, поэтому я решил протестировать отдельный API, как указано выше. В интерфейсе регистрации всегда появляется сообщение об ошибке, но в консоли серверного компонента или в любых логах POST/GET ничего не печатается, хотя на локальной машине все работает прекрасно. Сообщение об ошибке 2024/11/29 10:36:48 [error] 901#901: *9 connect() failed (111: Connection refused) while connecting to upstream, client: 172.69.121.138, server: avery-insights.icu, request: “POST /auth/signup HTTP/1.1”, upstream: “http://127.0.0.1:5000/auth/signup”, host: “avery-insights.icu”
location /auth/signup {
proxy_pass http://localhost:5000/auth/signup;
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;
}
========================================================
Серверный код:
server.js:
const authRoutes = require('./routes/authRoutes');
app.use('/auth', authRoutes);
app.use('/table', tableRoutes);
authRoutes.js
router.post('/signup', validateSignup, signup);
Ответ или решение
Когда вы развертываете веб-сайт с использованием NGINX в качестве реверс-прокси для вашего бэкенда на Node.js, и сталкиваетесь с проблемой, когда NGINX не распознает ваш бэкенд, несмотря на то, что он работает, очень важно тщательно исследовать потенциальные причины возникновения этой ошибки. Ваша проблема, скорее всего, связана с конфигурацией NGINX или с тем, как бэкенд сервер обрабатывает запросы.
1. Проверьте состояние бэкенд сервера
Первым делом убедитесь, что ваш бэкенд действительно запущен и прослушивает нужный порт (5000). Для этого выполните команду на вашем сервере:
netstat -tuln | grep 5000
Если вы не видите, что ваш процесс слушает на порту 5000, его необходимо запустить.
2. Правильная конфигурация NGINX
Ваша конфигурация NGINX имеет некоторые аспекты, которые могут быть подкорректированы для обеспечения корректной работы с вашим бэкендом. Приведенная вами конфигурация:
location /auth/signup {
proxy_pass http://localhost:5000/auth/signup;
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;
}
Изменение proxy_pass
Так как вы используете proxy_pass
, вам следует указать базовый URL, а не отдельный путь к API. Измените строку на:
proxy_pass http://localhost:5000;
Теперь ваш запрос /auth/signup
будет правильно маршрутизироваться на бэкенд.
3. Проверка прав доступа и firewall
Если все вышеперечисленные аспекты учтены и проблема не устранена, может быть полезно проверить настройки брандмауэра. Убедитесь, что порты 5000 и 80 (или 443, если вы используете HTTPS) открыты:
sudo ufw status
Если порты закрыты, откройте их следующими командами:
sudo ufw allow 5000
sudo ufw allow 'Nginx Full'
4. Логирование и диагностика
Чтобы более точно понять, что происходит, включите детализированное логирование в NGINX, добавив в конфигурацию директивы error_log
и access_log
:
error_log /var/log/nginx/error.log debug;
access_log /var/log/nginx/access.log;
После внесенных изменений, не забудьте перезапустить NGINX:
sudo systemctl restart nginx
5. Проверка работы бэкенда с клиентом
Убедитесь, что ваш бэкенд правильно обрабатывает запросы, проводя тестирование через Postman или curl. Попробуйте отправить POST-запрос на ваш бэкенд напрямую (например, на http://localhost:5000/auth/signup
) и посмотрите на ответ.
Заключение
Если вы исправите конфигурацию NGINX, проверите состояние вашего бэкенда, настройки брандмауэра и включите логирование, вы сможете устранить проблему распознавания бэкенда. Не забывайте, что каждый этап играет важную роль в правильной работе системы. Если ваши усилия не увенчаются успехом, возможно, стоит обратиться за дополнительной помощью к сообществу или профессионалам в данной области.