Андрей Смирнов
Время чтения: ~7 мин.
Просмотров: 21

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

Эта статья – пошаговая инструкция по созданию локального web-сервера. В ней описана установка web-сервера Apache 2.4 на платформе ОС Windows. Тестирование установки выполнялось на Windows Server 2012 R2 для 64х разрядной операционной системы. Более подробно можно посмотреть в документации http://httpd.apache.org/docs/2.4/

Установка  Apache 2.4

Шаг 1. На сайте apache.org нет версии Apache 2.4 для Windows. Поэтому дистрибутив возьмем на apachelounge.com. В момент написания статьи последний релиз – Apache 2.4.25 win64

блог18_1-1.png?fit=994%2C529&ssl=1

В дистрибутиве Apache нет файла инсталляции. Поэтому установка будет выполняться вручную.

Шаг 4 .  Скачиваем  apache 2/4/25 win64   и компоненту C++ Redistributable Visual Studio 2015 : vc_redist_x64/86.exe.

Шаг 5   Создаем папку и распаковываем архив httpd-2.4.25-win64-VC14.zip временную папку.  Скопируйте папку  Apache24 на диск С.  Не меняйте путь. Пусть будет C:Apache24. Правок в файле конфигурации будет гораздо меньше, если маршрут  будет такой C:Apache24

Шаг 6   С помощью блокнота редактируем  файл  конфигурации httpd.conf , установленный по маршруту  C:Apache2conf  :

Строка 46  Устанавливаем значение параметра ServerName.ServerName localhost:80

Строка 116 Снимаем  комментарий  (#) и делаем доступно загрузку модуля

LoadModule foo_module modules/mod_foo.so  

Строка 172  . Устанавливаем значение параметра ServerName и ServerAdminServerName localhost:80

ServerAdmin admin@mydomain.ru   

Я создал специальную учетную запись электронной почти на yandex  для параметра ServerAdmin

 Строка 179  Устанавливаем значение параметра DocumentRoot (расположение документов сайта). Я оставил такой мршрут по умолчанию

DocumentRoot C:/Apache24/htdocs

Шаг 7  Исполняемые файлы Apache находятся в папке C:Apache24bin. Добавляем это значение в переменную среды PATH Windows.

блог18_2.png?fit=627%2C354&ssl=1

Шаг 8 Перед установкой  Apache как службу нужно запустить компоненту C++ Redistributable Visual Studio 2015 : vc_redist_x64/86.exe.

Шаг 9  Устанавливаем Apache как службу.

Исполняемые файлы Apache находятся в папке C:Apache24bin.  Для этом открываем командную панель  (Start > Run > cmd) с правами администратора и командой cd меняем директорию, чтобы было C:Apache24bin >  и запускаем httpd.exe -k install

Отметим, что я забыл выполнить шаг 8 перед  запуском службы Apache.  В результате без компоненты  C++ Redistributable Visual Studio 2015  не запускается  Apache из-за того , что нужна библиотека  vcruntime140.dll  в папке  C:WindowsSysWOW64 ( а  для 32 бит в папку C:WindowsSystem32).

блог18_3.png?fit=627%2C321&ssl=1

Аналогичное сообщение дает параметр тестирования службы httpd.exe -t

Можно попробовать скачать компоненту  vcruntime140.dll от сюда  http://www.dll.ru/files/vcruntime140-dll.html и  скопировать  файл в папку  C:WindowsSysWOW64  ( для 32 бит нужно скопировал  файл в папку C:WindowsSystem32).  Однако после этого нужно перезагружать компьютер. Поэтому я рекомендую установить  компоненту C++ Redistributable Visual Studio 2015 : vc_redist_x64/86.exe. Установка этой компоненты не требует перезагрузки компьютера.

Шаг  10 После запуска службы apache  httpd.exe -k start , открываем список запущенным служб в управлении компьютера и находим службу apache 2.4

блог18_4.png?fit=627%2C360&ssl=1

убедимся, что служба запущена и тип запуска – “автоматически”  

Шаг 10  Проверяем работоспособность сервера. В командной строке браузера набираем адрес: http://localhost. Если установка Apache прошла успешно – на экране отобразится текст Itworks!. В противном случае мы увидим пустой экран.

В случае если сервер не запустился, следует проверить, не занят ли порт 80, который использует Apache по умолчанию. Делается это с помощью командыnetstat –anb

Чаще всего этот порт используют Skype или Firefox. В этом случае следует либо освободить порт, либо перевести Apache на порт 8080.

Для этого в файле httpd.conf изменяем значений параметров ServerName и Listen. ServerName localhost:8080

После этого перезапускаем службу командойhttpd.exe -k restart

и опять пытаемся зайти по адресу http://localhost

Для удобства работы с сервером Apache можно установить в меню автозагрузки Windows ярлык, указывающий на C:TestServer Apache24bin ApacheMonitor.exe

Если какая-либо программа использует порт, то другой процесс уже не может использовать этот же самый порт. К примеру, если на вашем компьютере порт 80 уже занят, то Apache просто не запустится).

Ещё одной причиной, почему может возникнуть желание поменять порт — сделать ваш сервер менее заметным. К примеру, если вы не предприняли мер по защите, то любой в вашей локальной или глобальной сети может подключиться к вашему веб-серверу. Если скрипты содержат уязвимости или просто плохо настроены, то постороннее лицо может лазить по вашим локальным сайтам и, в случае удачной атаки, даже лазить по всему вашему компьютеру. Если поменять порт со стандартного 80 на какой-нибудь необычный, то сервер будет чуть труднее найти. Хотя сканеры портов всё равно смогут это сделать.

Итак, по умолчанию Apache использует 80 порт, это определяется директивой:

  Listen 80

в конфигурационном файле httpd.conf.

Чтобы изменить порт, откройте этот файл и вместо 80 впишите любой другой незанятый в вашей системе:

  Listen 48855

Если ваш сайт предназначен быть публичным сервером и сайты должны быть доступны другим пользователям, то смена порта нежелательна, поскольку они смогут перейти на ваш сайт только по специальному адресу.

Чтобы открыть сайт на нестандартных портах (не на 80 или 443), добавьте через двоеточие к адресу сайта порт, который прослушивает сервер:http://localhost:48855

401-1.png

Также можно делать ссылки такого вида: http://localhost:48855. Они являются работающими и вы можете перенаправить посетителя с одной страницы или сайта на другой, работающий на нестандартном порте.

Связанные статьи:

  • Apache Forwarding — проброска портов веб-сервера (100%)
  • Apache для Windows (52.9%)
  • Как запустить Apache на Windows (52.9%)
  • Документация по Apache на русском языке (52.9%)
  • Как подключить PHP к Apache на Windows (52.9%)
  • Как обновить phpMyAdmin (RANDOM — 50%)

Уже не раз сталкивался с проблемой, что 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.Более быстрый способ найти имя процесса предложил , за что ему отдельное спасибо: В консоли надо ввести следующую команду: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_MACHINESYSTEMCurrentControlSetServicesHTTP И отличие в этих способах: 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-80http://stackoverflow.com/questions/1430141/port-80-is-being-used-by-system-pid-4-what-is-thathttp://serverfault.com/questions/65717/port-80-is-being-used-by-system-pid-4-what-is-thathttp://www.cameroncooke.com/2009/01/25/windows-7-uses-port-80-and-makes-it-impossible-to-install-apache-solution/Используемые источники:

  • https://master1c8.ru/site/ustanovka-i-nastroyka-servera-apache-2-4/
  • https://apache-windows.ru/как-запустить-apache-не-на-80-порту/
  • https://habr.com/post/145189/

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации