Apache2 (Httpd) не работает после обновления до High Sierra

15

У меня есть проблема, при которой Apache не запускается после обновления до High Sierra 10.13.1. В журналах ошибок ничего не отображается, но при попытке apachectl startничего не происходит. Если я бегу, apachectl configtestя получаю "Синтаксис ОК

Я использовал такие команды, как sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plistбезрезультатно. Апач не запустится. Я могу бежать, sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.httpd.plistи это тоже не работает.

Я взглянул на список служб brew, и httpd отображается в списке вместе с другим процессом (mysql), но состояние httpd показывает желтый «запущен» вместо зеленого.

Я пробовал много разных вещей, и я обнаружил, что если я загляну в файл system.log, то найду com.apple.xpc.launchctl[1] (homebrew.mxcl.httpd24[11780]): Service exited with abnormal code:1

Если я запускаю apachectl start, команда, кажется, работает, но когда я запускаю команду stop, я получаю «httpd (без файла pid) не работает.
Я также получаю вывод com.; Apple.xpc.launchd [1] ( org.apache.httpd): Пожалуйста, переключитесь с OnDemand на KeepAlive.

Есть ли что-то в High Sierra, которое мешает работе Apache, когда он работает нормально в Sierra?

Alcyeonnero
источник
1
Вы смешиваете Apache httpd от brew и Apache httpd от Apple (чьи демоны запуска запускают разные двоичные файлы)! Откуда вы получаете статус httpd (т.е. желтый или зеленый индикатор)? Какое начальное руководство по настройке вы использовали?
Кланомат
Я не смешиваю их, я проходил через шаги, пытаясь использовать как brew, так и Apple apache, когда я выполняю список brew services list' I receive a yellow indicator, I checked with all of the available users and ran услуг brew, и все они показывают один и тот же индикатор. Что касается руководства по установке, Ansible был использован для настройки Apache. Это было сделано на 5 других MacBook, они все еще работают под управлением Sierra. У этого MacBook была проблема, и Apple
выполнила
Под микшированием я имею в виду: у вас установлено как минимум два двоичных файла apachectl и httpd (и два файла конфигурации). Обычно bache apachectl является предпочтительным (из-за содержимого по умолчанию переменной PATH, ваши могут отличаться). Apachectl от AFAIR brew не запускает httpd от Apple с опцией запуска по умолчанию (т.е. apachectl start). То же самое с ... configtest!
Кланомат
«Ansible был использован для настройки apache», вы имеете в виду это руководство: Mac Development Ansible Playbook ? Лучше добавить ссылку на руководство по установке или настройке. Различные руководства по настройке для различных версий MacOS содержат слегка отличающиеся конфиги / создают разные envs.
klanomath
Я только что обновился в High Sierra в эти выходные, и у меня точно такая же проблема. Я использовал httpdформулу Homebrew , и теперь apache не отвечает. Когда я делаю brew services list, я также получаю startedдля httpd в желтом, и когда я бегу sudo apachectl stop, он говорит мне, чтоhttpd (pid 87?) not responding.
wonder95

Ответы:

16

По моему мнению, вы использовали различные механизмы запуска / запуска httpd, выполнив слишком много команд, связанных с httpd.

При установленном apache-httpd homebrew и homebrew и PATH по умолчанию у вас есть шесть способов запустить httpd.

Apple Apache:

  • sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
  • sudo /usr/sbin/apachectl start

Доморощенный апач:

  • sudo apachectl start
  • apachectl start
  • sudo brew services start httpd
  • brew services start httpd

Если вы скопировали файл homebrew.mxcl.httpd.plist вручную в ~ / Library / LaunchAgents / или / Library / LaunchDaemons /, у вас есть еще два варианта, чтобы начать его, загрузив их (sudo) launchctl load ....

Если вы не изменили конфигурационные файлы httpd или сценарии apachectl, ветвь Apple будет использовать файл httpd.conf от Apple в / var и DocumentRoot в папке / Library.

Ветвь доморощенного использует подпапки в / usr / local /.

Некоторые методы запуска не будут работать, если вы привязали порты httpd к портам ниже 1024!

Если вы используете (sudo) brew services ...для запуска httpd, вы должны использовать правильную (sudo) brew services listкоманду для проверки статуса:

Если вы запустите его как root, перечислите его с правами root:

sudo brew services start httpd > sudo brew services list

или с пользователем privs:

brew services start httpd> brew services list.


Чтобы решить вашу проблему, выгрузите httpd от Apple:

  • sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
  • удалить все установленные вручную homebrew.mxcl.httpd.plist
  • остановить любой доморощенный httpd сервис с (sudo) brew services stop httpd
  • остановить любой httpd, запущенный apachectl:

    apachectl stop
    sudo apachectl stop
    sudo /usr/sbin/apachectl stop
    
  • Откройте Activity Monitor и убедитесь, что процесс httpd не запущен.
  • перезагрузка

Теперь - если вы хотите использовать httpd homebrew на привилегированных портах - введите:

sudo brew services start httpd

Проверьте успешное начало с sudo brew services list.

klanomath
источник
При попытке предоставить исправление, которое вы предоставили, я получаю тот же вывод, что и я. apachectl stopвыводит, httpd (no pid file) not runningи когда я запускаю, sudo brew services httpd start sudo brew services list указывает apache2 (httpd) startedжелтым цветом. Когда я пытаюсь получить доступ к какой-либо связанной веб-странице, я не могу. Мне интересно, изменило ли обновление до 10.13 что-то в apache, препятствуя его запуску.
Alcyeonnero
14

Относительно доморощенного httpd, одна проблема, с которой я недавно столкнулся, была старый оставшийся файл httpd.pid, который препятствовал запуску httpd. Симптом apachectl startсказал, что httpd уже запущен, но это не так.

Потому что здесь был старый файл:

/usr/local/var/run/httpd/httpd.pid

Решением было удалить этот pid-файл и затем запустить httpd.

Эдуард Розенберг
источник
Великий! это моя проблема, когда мой MBP решает, что он не выйдет из спящего режима, и я должен выключить его.
Фрумберт
2
Это решение также работало в MacOS Mojave. Brew подумал, что Apache запущен, но не было httpdмонитора активности. Это исправило это.
Вахид Амири
Это спасло меня от многих неприятностей!
SEJU
Это сработало и для меня. Я не мог загрузить какой-либо веб-сайт и продолжал получать ERR_CONNECTION_REFUSED. Когда я пытался составить список служб, которые были запущены, brew services listя получал желтый статус «запущен», что означало, что что-то не так с активным состоянием сервера. Удаление pid исправило это, и теперь список услуг теперь показывает активный статус в виде зеленого «запущен». Спасибо тебе за это!
Майк Корменди
Если ваша машина была сильно перезагружена после паники ядра / отключения питания / и т. Д., Это, вероятно, ваша проблема. Спасибо!
Дом Стаббс
2

Я столкнулся с тем же после того, как я повысил до Высокой Сьерры ранее сегодня. Я обнаружил, что следующие файлы Apache были заменены новыми версиями. К счастью, для всех этих файлов в той же папке существовал предыдущий файл FILE ~. Я просто скопировал предыдущую версию обратно в исходную, перезапустил apache и все было хорошо.

В папке /etc/apache2:

./httpd.conf
./extra/httpd-vhosts.conf
./extra/httpd-ssl.conf

Пример:

cp /etc/apache2/httpd.conf~previous /etc/apache2/httpd.conf
Unmesh
источник
В папке /etc/apache2/extra/находится приблизительно 10 файлов с ~ предыдущим приложенным к ним, если все они будут изменены, или только те два, которые вы упомянули в /etc/apache2/extra/папке
Alcyeonnero
Я бы начал с файлов httpd.conf и httpd-vhosts.conf. Если у вас есть настройка SSL, вам также необходимо обновить httpd-ssl.conf. Остальное зависит от того, изменили ли вы их ранее. Я бы использовал diff, чтобы увидеть, изменились ли файлы, например, diff httpd.conf httpd.conf ~ previous во всех остальных файлах
Unmesh
Я начал с тех файлов, которые ничего не изменили.
Alcyeonnero
1

У меня такая же проблема

com.apple.xpc.launchctl[1] (homebrew.mxcl.httpd24[11780]): Service exited with abnormal code:1

Это означает, что httpd вышел ненормально.

Затем я вручную запустил httpd, чтобы увидеть, в чем проблема

> httpd
(13)Permission denied: AH00091: httpd: could not open error log file /usr/local/var/log/httpd/error_log.

Глядя на разрешения это было довольно ясно

> ll /usr/local/var/log/httpd/
total 96
-rw-r--r--  1 root  admin    242 15 apr 12:38 access_log
-rw-r--r--  1 root  admin  42062 20 jun 11:01 error_log

Я думаю, что я запустил httpd как root, что вызвало эту проблему. Я удалил файлы и после

brew services restart httpd

все было хорошо.

Ханс Пиккемаат
источник
1

Я столкнулся с этим недавно. Причина в том, что homebrew устанавливает apache2 / httpd в доступные для пользователя папки и запускается как пользователь (запустив команду: brew services start httpd).

Не работает как обычный пользователь означает, что httpd не может прослушивать привилегированные порты (1024 и ниже).

Таким образом, даже если httpd.conf настроен на прослушивание 80 и 443, httpd не может получать запросы через эти порты.

Особенность в том, что вы запускаете httpd командой: sudo apachectl start. Эта команда запускает httpd от имени пользователя root. Корневому пользователю разрешено прослушивать порты 80 и 443. Затем httpd отбрасывает привилегии, снова работая как пользователь _www.

Итак, короткий ответ - запустить homebrew httpd на портах 80, а 443 - запустить его с помощью: sudo apachectl start. Вы также можете запустить его с помощью: sudo brew services start httpd. Brew скажет вам, что он требует определенных папок для root, что, я полагаю, нормально, но не обязательно, так как запуск sudo apachectl не требует прав доступа к файлу и / или смены владельца.

Caesars
источник
0

Я бы наоборот предложил, что HomeBrew всегда запускает httpd от sudo. Если вы выполните команду ps -aef | grep httpd, вы увидите, что она работает. Работа без sudo не приводит к выводу ps, что может создать неправильное впечатление, что httpd не работает.

Также я не уверен, что в обоих случаях загружены разные или одинаковые конфигурации. Я установил PHP и создал файл test.php с phpinfo в каталоге DocumentRoot. Если вы запускаете apache с помощью sudo, вы можете увидеть phpinfo с localhost / test.php при использовании brew services, запуск httpd выдаст вам ошибку, если DocumentRoot находится в области, где требуется root-доступ.

Себастьян
источник