Как проверить работает ли nginx, доступен ли порт
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Проверка статуса Nginx и доступности порта
Nginx — высокопроизводительный веб-сервер, часто используемый как обратный прокси, балансировщик нагрузки или кэширующий сервер. Его корректная работа критически важна для доступности веб-приложений. Вот комплексный подход к проверке его работы и доступности порта.
1. Проверка статуса службы Nginx
Первое, что нужно сделать — убедиться, что сам процесс Nginx запущен и работает как служба. Способ зависит от системы инициализации.
Для систем с systemd (Ubuntu 16.04+, CentOS/RHEL 7+):
# Проверка статуса службы
sudo systemctl status nginx
# Альтернативные команды
sudo service nginx status # Совместимость со старыми системами
sudo /etc/init.d/nginx status # Прямой вызов init-скрипта
Ожидаемый вывод при работающем Nginx:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-10-10 14:30:00 UTC; 2 days ago
Docs: man:nginx(8)
Main PID: 1234 (nginx)
Tasks: 2 (limit: 4915)
CGroup: /system.slice/nginx.service
├─1234 nginx: master process /usr/sbin/nginx -g daemon off;
└─1235 nginx: worker process
Ключевые индикаторы:
Active: active (running)— служба работает- Присутствуют master и worker процессы
- Нет сообщений об ошибках в последних строках журнала
2. Проверка процессов Nginx
Иногда служба показывает статус "running", но сами процессы отсутствуют или "зависли".
# Поиск процессов Nginx
ps aux | grep nginx
# или более специфично
ps -ef | grep nginx | grep -v grep
# Проверка количества рабочих процессов
# (должно совпадать с указанным в конфигурации)
ps -eo pid,ppid,cmd | grep nginx | grep -v grep
Ожидаемый вывод:
root 1234 1 0 Oct10 ? 00:00:00 nginx: master process /usr/sbin/nginx
www-data 1235 1234 0 Oct10 ? 00:00:12 nginx: worker process
www-data 1236 1234 0 Oct10 ? 00:00:11 nginx: worker process
3. Проверка доступности порта
Nginx по умолчанию слушает порт 80 (HTTP) и/или 443 (HTTPS). Проверим, открыты ли эти порты на сетевых интерфейсах.
Локальная проверка на сервере:
# Проверка открытых портов и процессов, которые их слушают
sudo netstat -tlnp | grep nginx
# Более современная альтернатива
sudo ss -tlnp | grep nginx
# Конкретная проверка порта 80
sudo lsof -i :80
Ожидаемый вывод:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx: master
tcp 0 0 :::80 :::* LISTEN 1234/nginx: master
Удаленная проверка доступности порта:
# Использование telnet (проверяет TCP-соединение)
telnet ваш-сервер 80
# Использование curl (проверяет HTTP-ответ)
curl -I http://ваш-сервер
# Использование nc (netcat)
nc -zv ваш-сервер 80
# Автоматизированная проверка нескольких портов
for port in 80 443; do
timeout 2 bash -c "</dev/tcp/ваш-сервер/$port" && echo "Порт $port открыт" || echo "Порт $port закрыт"
done
4. Проверка конфигурации Nginx
Некорректная конфигурация может быть причиной, когда Nginx запущен, но не работает правильно.
# Проверка синтаксиса конфигурации
sudo nginx -t
# Проверка конфигурации с указанием конкретного файла
sudo nginx -t -c /etc/nginx/nginx.conf
# Вывод фактически загруженной конфигурации
sudo nginx -T # Показывает всю конфигурацию
Успешный вывод:
nginx: configuration file /etc/nginx/nginx.conf test is successful
5. Проверка через HTTP-запрос
Самая содержательная проверка — сделать реальный HTTP-запрос к серверу.
# Простой запрос к главной странице
curl -v http://localhost/
# Проверка конкретного виртуального хоста
curl -H "Host: ваш-домен.com" http://localhost/
# Проверка со внешнего сервера
curl -I http://ваш+публичный-ip/
# Автоматизированная проверка с таймаутом и выводом кода ответа
response=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 http://localhost/)
if [ "$response" = "200" ] || [ "$response" = "301" ] || [ "$response" = "302" ]; then
echo "Nginx отвечает корректно, код: $response"
else
echo "Проблема с Nginx, код ответа: $response"
fi
6. Анализ журналов (логов)
Если проблемы есть, логи Nginx могут содержать ценную диагностическую информацию.
# Просмотр основных логов в реальном времени
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
# Поиск ошибок в логах
sudo grep -i error /var/log/nginx/error.log | tail -20
# Проверка лог-файлов сервиса (systemd)
sudo journalctl -u nginx.service -f # в реальном времени
sudo journalctl -u nginx.service --since "2 hours ago" # за период
7. Комплексный скрипт проверки
Вот пример автоматизированной проверки всех аспектов:
#!/bin/bash
echo "=== Комплексная проверка Nginx ==="
echo
# 1. Проверка статуса службы
echo "1. Статус службы Nginx:"
systemctl is-active nginx > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✓ Служба работает"
sudo systemctl status nginx --no-pager -l | head -10
else
echo " ✗ Служба не работает"
fi
echo
# 2. Проверка процессов
echo "2. Процессы Nginx:"
pgrep -x nginx > /dev/null
if [ $? -eq 0 ]; then
echo " ✓ Процессы найдены:"
ps aux | grep nginx | head -5
else
echo " ✗ Процессы не найдены"
fi
echo
# 3. Проверка конфигурации
echo "3. Проверка конфигурации:"
sudo nginx -t 2>&1
echo
# 4. Проверка портов
echo "4. Проверка открытых портов:"
sudo ss -tlnp | grep nginx
echo
# 5. Проверка HTTP-ответа
echo "5. Проверка HTTP-доступности:"
response=$(timeout 3 curl -s -o /dev/null -w "%{http_code}" http://localhost/)
if [ ! -z "$response" ]; then
echo " Код ответа: $response"
else
echo " Нет ответа от сервера"
fi
Типичные проблемы и решения:
-
Nginx не запускается
- Проверьте конфигурацию:
sudo nginx -t - Проверьте права на доступ к порту (для портов < 1024 нужны права root)
- Убедитесь, что порт не занят другим процессом:
sudo ss -tlnp | grep :80
- Проверьте конфигурацию:
-
Nginx запущен, но порт недоступен
- Проверьте брандмауэр:
sudo ufw statusилиsudo firewall-cmd --list-all - Убедитесь, что в конфигурации указан правильный
listenдиректива - Проверьте сетевые интерфейсы:
ip addr show
- Проверьте брандмауэр:
-
Доступ есть, но возвращается ошибка 502 Bad Gateway
- Проверьте доступность бэкенд-серверов
- Проверьте таймауты и параметры проксирования в конфигурации Nginx
Регулярный мониторинг этих аспектов с помощью инструментов вроде Prometheus + Grafana, Nagios или Zabbix поможет своевременно выявлять проблемы с доступностью Nginx в production-окружении.