Apache2 (Httpd) не працює після оновлення до High Sierra


15

У мене виникла проблема, коли Apache не запуститься після оновлення до Високої Сьєрри 10.13.1. У журналах помилок нічого не відображається, але коли я намагаюся, apachectl startнічого не відбувається. Якщо я запускаю, apachectl configtestотримую "Синтаксис ОК

Я використовував команди як sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plistне даремно. Apache не запуститься. Я можу бігати, sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.httpd.plistі це теж не працює.

Я переглянув список служб заварювання та 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.

Чи є щось із Високою Сьєррою, що заважає Apache працювати, коли він добре пробіг у Сьєррі?


1
Ви змішуєте Apache httpd Brew та Apache httpd від Apple (чиї демони запуску починають різні бінарні файли)! Звідки ви отримуєте статус httpd (тобто жовтий та зелений індикатор)? Яким початковим посібником із налаштування ви користувалися?
кланомат

Я їх не змішую, я проходив етапи використання спробувати як варити, так і апаші Apple, коли я виконую список brew services list' I receive a yellow indicator, I checked with all of the available users and ran сервісів заварювання`, і всі вони показують один і той же показник. Що стосується посібника з налаштування, для налаштування apache використовувався Ansible. Це зроблено на 5 інших MacBooks, вони все ще працюють Sierra. У цього MacBook виникла проблема, і Apple запустила діагностику та скинув ОС, оновивши ОС на High Sierra
Alcyeonnero

Під змішуванням я маю на увазі: у вас принаймні два бінарні файли apachectl та httpd (і два файли конфігурації). Зазвичай кращим є apachectl пивоваріння (через зміст PATH за замовчуванням вміст ваших може бути різним). APAIR Brew's apachectl не запустить httpd Apple з опцією запуску за замовчуванням (тобто apachectl start). Те саме з ... configtest!
кланомат

Якщо "Ansible використовувався для налаштування apache", ви маєте на увазі цей посібник: Mac Development Ansible Playbook ? Краще додати посилання до посібника з інструкцій чи налаштування. Різні посібники із налаштування для різних версій macOS містять дещо різні конфігурації / створення різних середовищ.
кланомат

Я щойно оновився до Високої Сьєрри в ці вихідні, і у мене виникає така ж проблема. Я використовував httpdформулу Homebrew , і зараз apache не відповідає. Коли я це роблю brew services list, я також отримую startedhttpd жовтим кольором, і коли я запускаю sudo apachectl stop, це говорить мені про цеhttpd (pid 87?) not responding.
wonder95

Відповіді:


16

На мій погляд, ви ввели в дію різні ваші механізми запуску демонів / запуску, виконавши занадто багато команд, пов'язаних з 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

Apache домородіння:

  • 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командою для перевірки стану:

Якщо ви запускаєте його як корінь, тоді перелічіть його з кореневими приватними файлами:

sudo brew services start httpd > sudo brew services list

або з приватними користувачами:

brew services start httpd> brew services list.


Щоб вирішити вашу проблему, вивантажте Apple httpd:

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

    apachectl stop
    sudo apachectl stop
    sudo /usr/sbin/apachectl stop
    
  • Відкрийте Монітор активності та перевірте, чи не запущений процес httpd.
  • Перезавантажте

Тепер - припускаючи, що ви хочете використовувати httpd homebrew на привілейованих портах - введіть:

sudo brew services start httpd

Перевірте успішний старт sudo brew services list.


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

14

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

Причиною тут був старий файл:

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

Рішенням було видалити цей pid-файл, а потім запустити httpd.


чудово! це моя проблема, коли мій MBP вирішує, що він не збирається спати від сну, і мені доведеться перемикати його.
frumbert

2
Це рішення також працювало в MacOS Mojave. Брю подумав, що Apache працює, але не було httpdмонітора активності. Це і виправило це.
Вахід Амірі

Це врятувало мені багато клопоту!
СЕЮ

Це працювало і для мене. Я не зміг завантажити жоден веб-сайт і продовжував отримувати ERR_CONNECTION_REFUSED. Коли я намагався скласти список служб, які працювали, brew services listя отримував жовтий статус «запущений», що означало, що з активним статусом сервера щось не так. Видалення pid зафіксувало це, і тепер список послуг показує активний статус як зелений "запущений", а не зараз. Дякую за це!
Майк Корменді

Якщо ваша машина сильно перезавантажилась після паніки ядра / відключення живлення / тощо, це, ймовірно, буде вашою проблемою. Дякую!
Dom Stubbs

2

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

У папці /etc/apache2:

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

Приклад:

cp /etc/apache2/httpd.conf~previous /etc/apache2/httpd.conf

У папці /etc/apache2/extra/є приблизно 10 файлів із попереднім доданим до них попереднім, чи все це буде змінено, або лише два згаданих вами у /etc/apache2/extra/папці
Alcyeonnero

Я б почав з файлів httpd.conf та httpd-vhosts.conf. Якщо у вас налаштування SSL, вам також потрібно буде оновити httpd-ssl.conf. Решта залежить від того, чи змінили ви їх раніше. Я б використав diff, щоб побачити, чи змінилися файли, наприклад, diff httpd.conf httpd.conf ~ попередній для всіх інших файлів
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

Я зіткнувся з цим нещодавно. Причина полягає в тому, що домівка встановлює apache2 / httpd у папках, доступних для користувача, та працює як користувач (запустивши команду: Brew services start httpd).

Якщо він не працює як звичайний користувач, це означає, що httpd не може слухати привілейовані порти (1024 і нижче).

Тож навіть якщо httpd.conf налаштований на прослуховування 80 та 443, httpd не може отримувати запити через ці порти.

Особливістю є те, коли ви запускаєте httpd за допомогою команди: sudo apachectl start. Ця команда запускає httpd як користувач root. Користувачеві root дозволено прослуховувати порти 80 та 443. httpd потім скасовує привілеї назад, виконуючись як _www користувач.

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


0

Я б запропонував навпаки, те, що HomeBrew говорить завжди виконувати httpd від sudo. Там, якщо ви робите ps -aef | grep httpd, ви побачите, що вона перелічена як запущена. Якщо зробити sudo, не виводиться PS, що може створити неправильне враження, що httpd не працює.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.