← Назад к вопросам

Как проверить работает ли nginx, доступен ли порт

1.2 Junior🔥 171 комментариев
#Linux и администрирование#Сети и протоколы

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Проверка статуса 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

Типичные проблемы и решения:

  1. Nginx не запускается

    • Проверьте конфигурацию: sudo nginx -t
    • Проверьте права на доступ к порту (для портов < 1024 нужны права root)
    • Убедитесь, что порт не занят другим процессом: sudo ss -tlnp | grep :80
  2. Nginx запущен, но порт недоступен

    • Проверьте брандмауэр: sudo ufw status или sudo firewall-cmd --list-all
    • Убедитесь, что в конфигурации указан правильный listen директива
    • Проверьте сетевые интерфейсы: ip addr show
  3. Доступ есть, но возвращается ошибка 502 Bad Gateway

    • Проверьте доступность бэкенд-серверов
    • Проверьте таймауты и параметры проксирования в конфигурации Nginx

Регулярный мониторинг этих аспектов с помощью инструментов вроде Prometheus + Grafana, Nagios или Zabbix поможет своевременно выявлять проблемы с доступностью Nginx в production-окружении.