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.

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

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

1
задан 10 August 2018 в 09:46
1 ответ

Похоже, что apache настроен на привязку к 0.0.0.0:80[1219 impression, что означает, что он привязывается к каждому IP-адресу в системе, на порту 80.

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

127.0.0.1:80 // localhost 192.168.10.55:80 // IP avail

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

Таким образом, есть несколько способов приблизиться к этому.

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

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

netstat -a |findstr :80
0
ответ дан 4 December 2019 в 03:45

Теги

Похожие вопросы