Ошибка «no listening sockets available» в Apache без к-л пояснений. Как исправить? — Хабр Q&A

Есть VDS, на нём установлены nginx с Apache. NGINX слушает 80 и 443 порты одного из белых IP-адресов (всё работает исправно), в Apache же настроен один виртуальный хост на 127.0.0.10:8371. В nginx включен proxy_pass на этот адрес.

Проблема вот в чём: апач никак не хочет стартовать. Конфиги проверку синтаксиса проходят успешно, все задействованные я проверил глазами несколько раз — всё идеально и всё, по идее, должно работать. Но при запуске апача он вылетает и в логах отображается следующее:

Jan 28 19:08:11 servername apachectl[827]: no listening sockets available, shutting down
Jan 28 19:08:11 servername apachectl[827]: AH00015: Unable to open logs
Jan 28 19:08:11 servername apachectl[817]: Action 'start' failed.
Jan 28 19:08:11 servername apachectl[817]: The Apache error log may have more information.
Jan 28 19:08:11 servername systemd[1]: apache2. service: Control process exited, code=exited, status=1/FAILURE

Адрес 127.0.0.10:ХХХХ, как понимаете, никем не занят, попытка достучаться туда тем же curl’ом выдаёт connection refused, то есть всё в этом плане нормально.

Весь вечер гуглю эту ошибку — у всех дело в уже занятом порте. И на серверах у людей, где уже была эта ошибка, но по причине занятого порта, в логах, перед строкой «no listening sockets available» есть об этом информация:

спойлер

Mar 31 16:17:29 server1 apachectl[160816]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
Mar 31 16:17:29 server1. apachectl[160816]: (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80

У меня же таких строчек нет, т.е апач на занятые порты и не жалуется (что и правильно), но стартовать не хочет.

Объясните кто-нибудь, пожалуйста, что ему не нравится и как эту проблему исправить. До этого всегда пользовался nginx’ом, никаких проблем не знал, но сейчас вот понадобился именно апач. И его изучение началось сразу же танцами с бубном =)

P.S. В error.log есть только несколько строк, которые там появились примерно тогда, когда я только устанавливал сам апач. Ничего нового он туда не пишет, хотя доступ к директории логов у него есть (хотя, возможно, он должен туда писать и всё то, что выводится в journalctl, но не суть, всё-таки не самая главная проблема, починить и позже можно.)

error.log

[Sat Jan 28 17:27:46.024424 2023] [mpm_event:notice] [pid 11797:tid 140664981413184] AH00489: Apache/2.4.54 (Debian) configured -- resuming normal operations
[Sat Jan 28 17:27:46.024596 2023] [core:notice] [pid 11797:tid 140664981413184] AH00094: Command line: '/usr/sbin/apache2'
[Sat Jan 28 17:41:49.346647 2023] [mpm_event:notice] [pid 11797:tid 140664981413184] AH00492: caught SIGWINCH, shutting down gracefully

php — 48) Адрес уже используется: AH00072: make_sock: не удалось привязать к адресу [::]:80

спросил

4 года 10 месяцев назад

Изменено 2 месяца назад

Просмотрено 58 тысяч раз

Я получаю сообщение об ошибке apache, когда пытаюсь получить доступ к какой-либо папке или файлу, он возвращает Http Not found или Запрещено Я пытаюсь перезапустить и запустить apache

 sudo apachectl reboot
 

вывод:

 (48) Адрес уже используется: AH00072: make_sock: не удалось привязать к адресу [::]:80
(48) Адрес уже используется: AH00072: make_sock: не удалось выполнить привязку к адресу 0.
0.0.0:80. нет доступных прослушивающих сокетов, выключение AH00015: Невозможно открыть журналы

Я пытаюсь остановить это

 sudo apachectl stop
 

вывод

 httpd (нет файла pid) не запущен
 

Я запускаю sudo lsof -i:80

вывод:

 КОМАНДА PID ПОЛЬЗОВАТЕЛЬ FD ТИП УСТРОЙСТВО РАЗМЕР/ВЫКЛ ИМЯ УЗЛА
    httpd 8904 root 5u IPv6 0x21884d81f1597d8f 0t0 TCP *:http (СЛУШАТЬ)
    httpd 9012 _www 5u IPv6 0x21884d81f1597d8f 0t0 TCP *:http (СЛУШАТЬ)
    httpd 12726 _www 5u IPv6 0x21884d81f1597d8f 0t0 TCP *:http (СЛУШАТЬ)
    httpd 12731 _www 5u IPv6 0x21884d81f1597d8f 0t0 TCP *:http (СЛУШАТЬ)
    httpd 12732 _www 5u IPv6 0x21884d81f1597d8f 0t0 TCP *:http (СЛУШАТЬ)
 

Любая идея решить эту проблему?

Полезная информация:

 OS X El Capitan
 
  • php
  • macos
  • apache
  • локальный хост

3

На моем Mac с Mojave (10. 14.1) внезапно Apache больше не мог обслуживать ipv4, а затем выдал мне ОШИБКУ 403. Я попытался убить все apache (sudo killall httpd)… проверка PID на (sudo lsof | grep AMP | grep apache)… даже не работало… был доступен только ipv6… все равно ОШИБКА 403.

Мне помогает: Отключите встроенный в OSX сервер Apache.

 sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
 

После этого:

 sudo apachectl -k перезапустить
 

Будьте счастливы 🙂

3

Мне помогло:

Пожалуйста, отредактируйте файл httpd.conf.

 /usr/local/etc/httpd/httpd.conf
 

И заменить

 Прослушать 80
 

с

 Слушать 127.0.0.1:80
 

Перезапустить apache

 sudo apachectl -k перезапустить
 

2

Попробуйте

 sudo netstat -ltnp | грэп ':80'
 

Вывод: tcp6 0 0 :::80 :::* LISTEN 1500/apache2

 sudo kill 1500
перезагрузка службы sudo apache2
 

1

Возможно одно из нескольких:

  1. У вас установлена ​​другая версия Apache. Вы можете убедиться, что используете правильный, запустив which apachectl . Например, у меня также есть две версии apache /usr/sbin/apachectl и /usr/local/bin/apachectl
  2. .
  3. Вы не используете apachectl start как root, хотя кажется, что это так.
  4. Вы можете запустить sudo lsof -i:80 , чтобы увидеть, что в данный момент привязано к этому порту

3

эта ошибка возникает из-за того, что сервер apache прослушивает порт 80 по умолчанию, поэтому другая служба или программа использует этот порт, и apache не может запуститься.

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

для идентификации можно запустить netstat

sudo netstat -ltnp | грэп ':80'

или

 sudo lsof -i:80
 

в моем случае я установил nginx и apache одновременно, и оба используют порт 80.

Временное решение: Остановить или убить службу, программу и т. д.

Постоянное решение:

  1. Изменить порт сервера Apache в файле конфигурации /etc/apache2/apache2.conf
  2. Удалите службу или программу, использующую порт 80.

в моем случае мне понадобились оба, поэтому я решил временно исправить это, отключив службу с помощью:

 systemctl stop MyServiceName.service
 

Если это служба, в противном случае используйте команду kill.

Моя конфигурация была настроена таким же образом и раньше, и я столкнулся с той же проблемой после того, как в последний раз обновил OSX. Я пытался найти ЧТО-НИБУДЬ, что прослушивало порт 80 или 443, и нигде ничего не мог найти. Мне потребовалось некоторое время, но, наконец, я нашел другую статью, в которой описывалось исправление, которое действительно работало. Имейте в виду, что я использую доморощенную установку и выгрузил установку apache2 по умолчанию, которая поставляется с Mac OSX.

Вот что у меня было раньше в моем httpd.conf:

 Прослушать 80
 

и у меня было что-то похожее в ssl.conf

 Listen 443 https
 

Мне пришлось изменить файл httpd.conf, чтобы использовать ServerName для localhost и Listen on 0.0.0.0:80, и то же самое для ssl.conf, но 0.0.0.0:443 https

httpd.conf:

 ServerName localhost
Слушать 0.0.0.0:80
 

и ssl.conf

 Listen 0.0.0.0:443 https
 

Как только я попробовал запустить его снова, все было счастливо. Надеюсь, это поможет! Я бы дал ссылку на статью, но у меня проблемы с поиском снова!

Похоже, httpd уже запущен. Для проверки выполните

lsof -i TCP:80
КОМАНДА PID ПОЛЬЗОВАТЕЛЬ FD ТИП УСТРОЙСТВА РАЗМЕР/ВЫКЛ ИМЯ УЗЛА

httpd 281 root 3u IPv6 19479 0t0 TCP *:80 (СЛУШАТЬ) ….

Так что убей httpd и делай что хочешь

1

Если вы недавно выполнили обновление программного обеспечения и переименовали или удалили какие-либо файлы по умолчанию в /etc/httpd/conf. d/, загляните туда. У вас могут быть повторяющиеся директивы, потому что менеджер пакетов переустановил их.

В моем случае я добавлял к файлам префикс с цифрами, чтобы контролировать порядок загрузки… но обновление ОС переустанавливало исходные файлы, поэтому У меня было два файла с «Слушай 443», которые конфликтовали и не были обнаружены проверкой синтаксиса. Удаление файлов os решило проблему.

(На этот раз я оставил их, но сделал их пустыми, поэтому конфликт будет отображаться при переустановке или обновлении)

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Обязательно, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

apache — почему нельзя использовать 443 в httpd.

conf?

спросил

Изменено 4 года, 2 месяца назад

Просмотрено 3к раз

Если я использую 443 в httpd.conf и хочу запустить httpd, сообщение об ошибке:

 (98)Адрес уже используется: make_sock: не удалось привязать к адресу [::]:443
(98) Адрес уже используется: make_sock: не удалось выполнить привязку к адресу 0.0.0.0:443.
нет доступных прослушивающих сокетов, выключение
Не удается открыть журналы
 

На самом деле я не использую 443, я проверяю порт 443 по:

 lsof -i:443
 

Я думаю, что порт 443 используется в ssl.conf, поэтому я не могу использовать его в httpd.conf. Когда я использую 444 или 666 в httpd.conf, я могу запустить файл httpd.

Это причина?

  • апач

2

Если не присматриваться, да, похоже, что причина. В каталоге conf.d по умолчанию загружаются все файлы, оканчивающиеся на .conf. ssl.conf устанавливает некоторые универсальные настройки, а затем определяет виртуальный хост на порту 443.

мое предложение: скопируйте ssl.conf в ssl.conf.bk (или что-то еще, просто чтобы у вас был оригинал для справки) Затем отредактируйте vhost в ssl.conf в соответствии с вашими потребностями.

пс: Позвольте мне сделать резервную копию и немного объяснить директорию conf.d на случай, если кто-то из читателей запутается. Многие проекты (не только Apache) используют эти каталоги как способ установки модульного файла конфигурации. Администратор может просто поместить файл конфигурации в нужный каталог, и Apache загрузит его при следующей перезагрузке службы. Я использую диспетчер конфигурации, который размещает правильные файлы на правильных серверах для меня, что позволяет очень легко запускать больше серверов по мере необходимости.

стр/с: Позвольте мне вернуться еще раз и объяснить, что такое виртуальный хост (также известный как «виртуальный хост»).