Введение
Однажды сайты перестают работать сами по себе и начинаются проблемы. Как это может произойти?
Представьте себе ситуацию, что на машине установлено несколько веб-серверов и сама машина ОЧЕНЬ давно не выключалась и не перезагружалась.
За ОЧЕНЬ долгое время могло накопиться много изменений и переустановок. Могли тестироваться новые веб-серверы или их параметры. Если системный администратор не проверял валидность конфигурационных файлов и однажды у сервера отключили электричество, то он (сервер) мог самостоятельно уйти в перезагрузку, хотя вы его об этом не просили.
При новой загрузке ОС Debian могло случиться так, что несколько процессов могут желать прослушивать 80 порт. Такое бывает, если устанавливаешь всё подряд без разбора.
Занимание порта происходит по принципу «Кто первый встал, того и тапки». Это значит, что «первым автозагрузочным веб-сервером» может быть НЕ ТОТ веб-сервер, который вам нужен. Это значит, что нужный вам может не загрузиться в нормальном режиме, а значит сайты так и будут лежать замертво.
Как исправить проблему? Нужно понять какой процесс слушает 80 порт?
Решение № 1
Для начала в Debian нужно установить пакет net-tools:
apt-get install net-tools
Скриншот:
Внутри пакета net-tools есть утилита netstat, которая как раз и поможет нам отыскать процесс, которым занят 80 порт:
netstat -ltnp | grep -w ':80'
В приведенной выше команде используются следующие опции:
netstat
l – указывает, что необходимо показывать только прослушивающие порты. Ключ -l (listening) выводить только те порты/сокеты, которые ожидают подключения.
t – указывает на отображение tcp-соединений. Ключ -t (tcp) вывести информацию только по протоколу TCP:
n – указывает на то, что необходимо показывать ip-адреса. Ключ -n (numeric) не пытаться преобразовать IP в имена хостов (FQDN).
p – позволяет показывать идентификатор процесса и имя процесса. Ключ -p (program) – вместе с другой информацией выводить имя программы, использующей данный порт/сокет.
grep — ищет по ШАБЛОНУ в каждом ФАЙЛЕ. ФАЙЛ, обозначенный как «-» является стандартным вводом. Если ФАЙЛ не дан, рекурсивные поиски исследуют рабочую директорию (если рекурсия указана соответствующей опцией), и нерекурсивные поиски считывают стандартный ввод. По умолчанию, grep печатает совпадающие строчки.
-w – показывает соответствие точной строки (‘:80’). Ключ —word-regexp () ШАБЛОН должен подходить ко всем словам.
Скриншот:
В нашем случае мы видим, что процесс apache2 занимает 80 порт для прослушивания. Теперь мы точно знаем кого можно винить в том, что у нас не работает nginx или кто-то другой. Можем сменить.
Решение № 2
lsof -i :80
Слева видим, что nginx прослушивает 80 порт.
Решение № 3
В два этапа.
Сначала узнаём какие процессы слушают 80 порт.
fuser 80/tcp
Потом по номеру процесса узнаём как он называется. Например:
ps -p 2886 -o comm=
Получаем nginx
Информационные ссылки
Команда NETSTAT — https://manpages.debian.org/bullseye/net-tools/netstat.8.en.html
Команда LSOF — https://manpages.debian.org/bullseye/lsof/lsof.8.en.html
Команда FUSER — https://manpages.debian.org/bullseye/psmisc/fuser.1.en.html
Команда PS — https://manpages.debian.org/bullseye/procps/ps.1.en.html