Решение проблем с портами в Apache в Windows

    Уже не раз сталкивался с проблемой, что Apache не может запустится из-за того, что другой процесс уже использует 80 порт. Собственно после долгого и мучительного серфинга по просторам русскоязычного, а потом и англоязычного интернета насобирал всесозможные способы устранения и причины появления данной проблемы. Эти самые причины и способы их решения и хочу перечислить здесь.

    (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



    Самая простая и обыденная причина появления данной проблемы это Skype.

    Первым делом необходимо проверить настройки Skype. Идем в Инструменты/Настройки/Дополнительно/Соединение/ и убираем галочку «Использовать порты 80 и 443 в качестве входящих альтернатив». Сохраняем и перезапускаем Skype чтобы настройки вступили в силу. Да и лучше повторно перепроверить эту настройку, потому что бывало, что она не сохранялась по неизвестной причине.

    Если не помогло, то надо поискать что за процесс использует наш порт.

    Открываем консоль: Главное меню->Выполнить-> вводим cmd и жмем enter.

    В консоли вводим следующую команду

    netstat -aon | findstr 0.0:80

    Левая часть команды вернет нам текущее состояние всех портов, а правая найдет в них нужный нам 80 порт.
    Смотрим результат и ищем последний столбец PID. Запоминаем его. Это идентификатор требуемого процесса.

    Если это процесс с PID не равный 4, то делаем следующее.

    Идем в Диспетчер задач и ищем необходимый нам процесс. По умолчанию PID не выводится. Для этого идем в Вид/Выбрать столбцы и ставим галочку у «ИД процесса(PID)». Сохраняем и видим что рядом с именем процесса появился столбец «ИД процесса».
    Ищем процесс с требуемым идентификатором. Там поступаете с этим процессом как хотите, можете просто убить его, убрать из автозагрузки, удалить всё приложение и т.п.

    В случае, когда PID был равен 4, это означает что 80 порт используется системой (системным процессом) и в Диспетчере задач вы увидите имя процесса System.

    Более быстрый способ найти имя процесса предложил 074909, за что ему отдельное спасибо:

    В консоли надо ввести следующую команду:
    for /f "tokens=1,2,3,4,5*" %i in ('netstat -aon ^| findstr ":80" ^| findstr /i listening') do echo %j %l & @tasklist | findst
    r %m

    которая и вернет имя необходимого процесса.

    Тут существует несколько решений и какое вам подойдет одному только богу известно.
    Первое.
    Это проделки некоторых служб:
    • Windows Remote Management — Службы удаленного управления
    • Sql server reporting services(MSSQLSERVER) — Cлужбы Reporting Services (SSRS) — Службы отчетов SQL Server
    • Web Deployment Agent Service


    Собственно необходимо эти службы отключить.

    1. ПКМ по «Мой компьютер»
    2. Управление
    3. Службы и приложения
    4. Службы
    5. Находим необходимые службы и останавливаем их.


    Если не помогло, то можете включить их обратно =) и переходить к следующему пунтку. Тоже самое нужно сделать если вы не нашли этих служб у себя( я у себя на win7 только WinRM нашел).

    Второе.
    Проделки 'http.sys'
    Тут я нашел 2 способа, не сильно отличающиеся друг от друга, мне помог именно 2ой, однако судя по комментариям 1ой тоже помог не малому количеству народа.
    Начинаются они одинаково.

    1) Идем в реестр. Выполнить->regedit
    2) В ветку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP
    И отличие в этих способах:
    3) Создаем параметр типа Dword c именем «NoRun» и присваиваем ему значение «1» без кавычек.
    или
    3) Ищем параметр «Start» и меняем значение на «0» без кавычек естественно.
    4) Перезагружаем компьютер.

    Радуемся жизни =)

    Материалы:
    http://www.mydigitallife.info/how-to-check-and-identify-which-application-is-listening-or-opening-port-80-and-443-on-windows/
    http://superuser.com/questions/43307/whys-is-system-process-listening-on-port-80
    http://stackoverflow.com/questions/1430141/port-80-is-being-used-by-system-pid-4-what-is-that
    http://serverfault.com/questions/65717/port-80-is-being-used-by-system-pid-4-what-is-that
    http://www.cameroncooke.com/2009/01/25/windows-7-uses-port-80-and-makes-it-impossible-to-install-apache-solution/
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 13
    • +8
      А ещё говорят, что Линукс — сложная система ;-)
      • 0
        Уже было, и не один раз. Да, я говорю о хабре.
        • +1
          Искал, но к сожалению найти не удалось. Если дадите ссылки, буду очень признателен.
        • +2
          netstat -b покажет сразу имена исполняемых файлов, запустивших процесс
          • 0
            Спасибо. Буду знать. Однако она не сильный выигрыш дает в скорости нахождения процесса, потому что отрабатывает она долго. Быстрее будет самому зайти в диспетчер и посмотреть процесс по PID.
            • 0
              for /f "tokens=1,2,3,4,5*" %i in ('netstat -aon ^| findstr ":80" ^| findstr /i listening') do echo %j %l & @tasklist | findst
              r %m
              • 0
                Эм. Вместо иконки хабраюзера перед echo — символ "@"
                • 0
                  Спасибо. Добавлю в пост этот способ.
          • 0
            для win8 это служба Служба веб-публикаций
            • 0
              для win10 так же Служба веб-публикаций
              • 0
                Прошло 4 года, а проблема все также актуальна? =)
            • 0
              Проделал все шаги! Есть удобная прога для просмотра, на каком порту что висит — "CurrPorts". 80 и 443 под индейцем. Добавил параметр Dword c именем «NoRun» в соотв. ветку реестра. Проверил, не грузят ли службы-бяки — нет, или выключены или отсутствуют. Это всё на Win 8. Установил на VM под Win2003 Server начисто денвера — та же ерунда: 500 и всё тут. Я в тупике, товарищи, в полном. Работало-работало годами, потом внезапно отвалилось и всё тут.
              • 0
                Ну судя по всему у вас проблема немного другого плана, чем описана в статье. Если вы видите 500 ошибку вместо своей страницы, то Apache запустился как минимум. Копайте в другую сторону. Включите вывод ошибок и посмотрите что вызывает эту самую 500 ошибку.

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.