Ошибка «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
спросил
Изменено 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 перезапустить
Попробуйте
sudo netstat -ltnp | грэп ':80'
Вывод: tcp6 0 0 :::80 :::* LISTEN 1500/apache2
sudo kill 1500 перезагрузка службы sudo apache2
1
Возможно одно из нескольких:
- У вас установлена другая версия Apache. Вы можете убедиться, что используете правильный, запустив
which apachectl
. Например, у меня также есть две версии apache/usr/sbin/apachectl
и/usr/local/bin/apachectl
. - Вы не используете
apachectl start
как root, хотя кажется, что это так. - Вы можете запустить
sudo lsof -i:80
, чтобы увидеть, что в данный момент привязано к этому порту
3
эта ошибка возникает из-за того, что сервер apache прослушивает порт 80 по умолчанию, поэтому другая служба или программа использует этот порт, и apache не может запуститься.
Решение состоит в том, чтобы определить, какая программа или служба использует этот порт, а затем закрыть, отключить или удалить ее.
для идентификации можно запустить netstat
sudo netstat -ltnp | грэп ':80'
или
sudo lsof -i:80
в моем случае я установил nginx и apache одновременно, и оба используют порт 80.
Временное решение: Остановить или убить службу, программу и т. д.
Постоянное решение:
- Изменить порт сервера Apache в файле конфигурации /etc/apache2/apache2.conf
- Удалите службу или программу, использующую порт 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 и делай что хочешь
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 загрузит его при следующей перезагрузке службы. Я использую диспетчер конфигурации, который размещает правильные файлы на правильных серверах для меня, что позволяет очень легко запускать больше серверов по мере необходимости.
стр/с: Позвольте мне вернуться еще раз и объяснить, что такое виртуальный хост (также известный как «виртуальный хост»).