Назад | Перейти на главную страницу

Windows - веб-сервер не может подключиться к порту 80, но ни один из известных процессов не использует порт.

Давным-давно я создал сценарий Powershell, который останавливает службу Apache, удаляет журналы веб-сервера и снова запускает службу. Не было проблем до недавнего времени, когда процесс остановки начал истекать тайм-аут, хорошо известная ошибка «Служба не ответила своевременно ...».

Ну ладно, чтобы обойти это, я обновил скрипт. Итак, очень в общих чертах объяснили, что теперь это так:

stop-service webserverservice
# Check if process is stil alive, and if found using the PID
stop-process -id $processPid -force

Это должно позаботиться об этом, если остановка службы истекает, ну, давайте просто убьем процесс. И на самом деле выполняем последнюю проверку дважды, чтобы убедиться, что ни один дочерний процесс не запускается, прежде чем убить основной процесс.

НО - на некоторых серверах не на всех и не всегда вышеперечисленные шаги не защищены от воды. При запуске сервера он говорит

(OS 10048)Only one usage of each socket address (protocol/network 
address/port) is normally permitted.  
: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs

И вот что я не могу объяснить. Все еще использую Powershell и эквивалент netstat Get-NetTCPConnection

PS C:\temp> Get-NetTCPConnection -LocalPort 80
Get-NetTCPConnection : No MSFT_NetTCPConnection objects found with 
property 'LocalPort' equal to '80'.  
Verify the value of the property and retry.

Это оставляет мне только один вариант: перезагрузить сервер, и тогда все снова в порядке.

Кто-нибудь видит то, чего нет у меня, что могло бы объяснить, почему у меня возникла эта проблема?

Похоже, что apache настроен на привязку к 0.0.0.0:80

Это означает, что он привязывается к каждому IP-адресу в системе через порт 80.

Таким образом, если хост - это, например, 192.168.10.55, как минимум apache попытается выполнить привязку к:

127.0.0.1:80 // localhost 192.168.10.55:80 // доступный IP

Если что-то из вышеперечисленного связано с 80, apache не запустится с ошибкой, которую вы заметили в OP

Итак, есть несколько способов подойти к этому.

Первый: Измените конфигурацию apache, чтобы привязать только к действительно необходимым IP-адресам. Избегайте localhost. Избегайте неизвестных или неиспользуемых IPv6 или интерфейсов управления.

Второй: Используйте netstat, чтобы узнать, что находится на порту 80.

netstat -a |findstr :80