Debian | Какой процесс слушает 80 порт?

Debian | Какой процесс слушает 80 порт?

Введение

Однажды сайты перестают работать сами по себе и начинаются проблемы. Как это может произойти?

Представьте себе ситуацию, что на машине установлено несколько веб-серверов и сама машина ОЧЕНЬ давно не выключалась и не перезагружалась.

За ОЧЕНЬ долгое время могло накопиться много изменений и переустановок. Могли тестироваться новые веб-серверы или их параметры. Если системный администратор не проверял валидность конфигурационных файлов и однажды у сервера отключили электричество, то он (сервер) мог самостоятельно уйти в перезагрузку, хотя вы его об этом не просили.

При новой загрузке ОС Debian могло случиться так, что несколько процессов могут желать прослушивать 80 порт. Такое бывает, если устанавливаешь всё подряд без разбора.

Занимание порта происходит по принципу «Кто первый встал, того и тапки». Это значит, что «первым автозагрузочным веб-сервером» может быть НЕ ТОТ веб-сервер, который вам нужен. Это значит, что нужный вам может не загрузиться в нормальном режиме, а значит сайты так и будут лежать замертво.

Как исправить проблему? Нужно понять какой процесс слушает 80 порт?

 

Решение № 1

Для начала в Debian нужно установить пакет net-tools:

apt-get install net-tools

Скриншот:

apt-get install net-tools - Debian
apt-get install net-tools — Debian

Внутри пакета 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 () ШАБЛОН должен подходить ко всем словам.

Скриншот:

netstat в Debian показал какой процесс занимает 80 порт
netstat в Debian показал какой процесс занимает 80 порт

В нашем случае мы видим, что процесс apache2 занимает 80 порт для прослушивания. Теперь мы точно знаем кого можно винить в том, что у нас не работает nginx или кто-то другой. Можем сменить.

 

Решение № 2

lsof -i :80
lsof узнали кто слушает 80 порт в Debian
lsof узнали кто слушает 80 порт в Debian

Слева видим, что nginx прослушивает 80 порт.

 

Решение № 3

В два этапа.

Сначала узнаём какие процессы слушают 80 порт.

fuser 80/tcp
fuser получаем номера процессов слушающих 80 порт в Debian
fuser получаем номера процессов слушающих 80 порт в Debian

Потом по номеру процесса узнаём как он называется. Например:

ps -p 2886 -o comm=
ps получаем имя процесса по его номеру в Debian
ps получаем имя процесса по его номеру в Debian

Получаем nginx

 

Информационные ссылки

Команда NETSTAThttps://manpages.debian.org/bullseye/net-tools/netstat.8.en.html

Команда LSOFhttps://manpages.debian.org/bullseye/lsof/lsof.8.en.html

Команда FUSER — https://manpages.debian.org/bullseye/psmisc/fuser.1.en.html

Команда PShttps://manpages.debian.org/bullseye/procps/ps.1.en.html