Ошибка «порт 80 занят» чаще всего встречается при запуске локальных веб-серверов — Apache в составе XAMPP, OpenServer, Denwer или Nginx отказываются стартовать, потому что порт 80 уже прослушивается другим процессом Windows. Типичное сообщение выглядит как «Address already in use» или «Не удалось выполнить привязку к порту 80».
Причина почти всегда одна: какой-то системный сервис или приложение захватил порт раньше вашего веб-сервера. В этой статье разберём, как за пару минут определить виновника и корректно освободить порт — без переустановки программ.
Что такое порт 80 и кто его обычно занимает
Порт 80 — стандартный порт протокола HTTP, на котором по умолчанию работают веб-серверы. Когда вы вводите адрес сайта без указания порта, браузер неявно обращается именно к порту 80. Поэтому локальные серверы для разработки тоже пытаются занять его первым делом.
Проблема в том, что в Windows за этот порт конкурирует сразу несколько претендентов:
- 🌐 IIS (Internet Information Services) — встроенный веб-сервер Microsoft, часто включён по умолчанию в Pro-редакциях Windows;
- 📞 Skype — старые версии мессенджера занимали порты 80 и 443 как резервные для входящих соединений;
- 🔧 Служба HTTP.sys и зависящие от неё службы: «Служба веб-публикаций» (W3SVC), «Служба агента веб-прокси» (WinHTTP Web Proxy Auto-Discovery), BranchCache;
- 🛠️ Другие локальные серверы и виртуальные машины, например второй экземпляр Apache, Docker, VMware.
⚠️ Внимание: если порт 80 занят системным процессом с PID 4 (System), не пытайтесь завершить его через диспетчер задач — это ядро Windows. Такой процесс освобождается только через остановку соответствующих служб, о чём рассказано ниже.
Шаг 1. Определяем, какой процесс занял порт 80
Прежде чем что-то отключать, нужно точно узнать виновника. Откройте командную строку или PowerShell от имени администратора и выполните:
netstat -ano | findstr :80
В выводе ищите строки, где локальный адрес заканчивается на :80 и стоит состояние LISTENING. Последний столбец — это PID, числовой идентификатор процесса. Запомните его.
Теперь узнайте имя процесса по этому PID:
tasklist | findstr
Если вместо имени приложения вы видите System с PID 4 — порт держит драйвер HTTP.sys, и копать нужно в сторону служб Windows, а не установленных программ.
Шаг 2. Освобождаем порт: варианты по виновнику
Дальнейшие действия зависят от того, что показала диагностика. Ниже — безопасные способы для самых частых случаев.
Если виноват IIS (inetinfo.exe или PID 4). Откройте «Панель управления» → «Программы и компоненты» → «Включение или отключение компонентов Windows» и снимите флажок с Службы IIS. Альтернатива — остановить службу через консоль:
net stop w3svc
Если виноват Skype. В настройках мессенджера снимите галочку, разрешающую использовать порты 80 и 443 в качестве альтернативных для входящих соединений (путь к настройке зависит от версии Skype). После перезапуска программы порт освободится.
Если виновата служба HTTP / PID 4. Проверьте и при необходимости остановите зависимые службы:
- ⚙️
net stop http— остановит HTTP-службу и предложит завершить зависимые службы (соглашайтесь, введя Y); - 📡 Служба агента веб-прокси WinHTTP — частый скрытый потребитель порта 80;
- 🗂️ BranchCache — встречается на корпоративных машинах.
☑️ Освобождение порта 80 — пошагово
⚠️ Внимание: остановка службы HTTP через net stop http может временно разорвать работу других компонентов, использующих HTTP.sys (например, некоторых служб удалённого управления и печати). На домашнем ПК это обычно некритично, но на рабочей машине сначала убедитесь, что перечисленные зависимые службы вам не нужны.
Шаг 3. Альтернатива: перевести веб-сервер на другой порт
Если отключать системные службы не хочется или нельзя (например, IIS нужен для работы), есть второй путь — сменить порт самого локального сервера. Это полностью безопасно и обратимо.
В Apache (включая XAMPP и OpenServer) порт задаётся директивой Listen в файле httpd.conf. Замените Listen 80 на Listen 8080, сохраните файл и перезапустите сервер. После этого сайт будет доступен по адресу localhost:8080.
В Nginx аналогичный параметр находится в блоке server конфигурационного файла: директива listen 80; меняется на любой свободный порт. Точное расположение конфигурации зависит от способа установки, поэтому сверьтесь с документацией вашей сборки.
Какие порты можно использовать вместо 80
Разработчики чаще всего выбирают 8080, 8000, 8888 или 3000. Это непривилегированные порты, которые редко заняты системными службами Windows. Перед назначением проверьте выбранный порт той же командой netstat -ano | findstr :ПОРТ.
Сравнение способов решения
Каждый подход имеет свои плюсы и ограничения. Сводная таблица поможет выбрать подходящий:
| Способ | Сложность | Обратимость | Когда применять |
|---|---|---|---|
| Отключение IIS | Низкая | Полностью обратимо | IIS не используется для работы |
| Остановка службы HTTP | Средняя | Обратимо перезапуском | Порт держит PID 4 (System) |
| Настройка Skype | Низкая | Полностью обратимо | Порт занят Skype |
| Смена порта сервера | Низкая | Полностью обратимо | Отключать службы нельзя |
| Завершение процесса по PID | Низкая | До перезапуска программы | Временное решение для теста |
Что делать, если порт освобождён, а сервер не стартует
Иногда после освобождения порта Apache или Nginx всё равно не запускается. Проверьте следующие моменты.
Первое — брандмауэр или антивирус. Некоторые защитные решения блокируют привязку к портам даже для локальных приложений. Временно отключите защиту и повторите запуск, чтобы исключить этот фактор.
Второе — порт может «залипнуть» в состоянии TIME_WAIT после аварийного завершения предыдущего процесса. В этом случае помогает либо короткое ожидание, либо перезагрузка компьютера — после неё все сокеты гарантированно освобождаются.
Третье — ошибки в самом конфигурационном файле. Если вы редактировали httpd.conf или конфигурацию Nginx, проверьте синтаксис: для Apache есть команда httpd -t (запускается из папки bin сервера), для Nginx — nginx -t. Опечатка в конфиге выдаёт ошибку запуска, которую легко спутать с занятым портом.
FAQ: частые вопросы про порт 80
Как быстро проверить, свободен ли порт 80?
Откройте командную строку и выполните netstat -ano | findstr :80. Если вывод пустой или в нём нет строк со статусом LISTENING — порт свободен.
Что означает процесс System с PID 4 на порту 80?
Это драйвер ядра HTTP.sys, через который работают службы Windows: IIS, WinHTTP, BranchCache и другие. Завершить его через диспетчер задач нельзя — нужно останавливать конкретную службу, которая держит порт.
Можно ли запустить Apache и IIS одновременно?
Да, если развести их по разным портам: например, IIS оставить на 80, а Apache перевести на 8080 через директиву Listen в httpd.conf. Оба сервера будут работать параллельно.
Почему порт снова занят после перезагрузки?
Служба, занимающая порт, стартует автоматически вместе с Windows. Откройте оснастку «Службы» (services.msc), найдите соответствующую службу и переведите её тип запуска в «Вручную» или «Отключена», если она вам не нужна.
Опасно ли освобождать порт 80 на домашнем компьютере?
Остановка IIS, Skype-настроек или смена порта сервера полностью безопасны и обратимы. Единственный момент — остановка службы HTTP затрагивает зависимые компоненты, поэтому читайте список зависимостей перед подтверждением.