Apache, который поставляется с Sierra, не остановится, не перезапустится и не примет новую конфигурацию

2299
TheEnvironmentalist

Я недавно установил PHP-7.1 через homebrew на MacOS Sierra, и все перестало работать. Странные ошибки, проблемы с разрешениями и так далее. Теперь я пытаюсь остановить Apache (который поставляется с Sierra), и Apache просто не умрет.

Убей это:

$ sudo apachectl stop AH00557: httpd: apr_sockaddr_info_get() failed for My-MacBook-Pro.local AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message httpd (no pid file) not running 

Проверьте, работает ли он:

$ sudo lsof -i:80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 3722 _www 4u IPv6 0x123456789abcdef 0t0 TCP *:http (LISTEN) httpd 3724 _www 4u IPv6 0x123456789abcdef 0t0 TCP *:http (LISTEN) httpd 3725 _www 4u IPv6 0x123456789abcdef 0t0 TCP *:http (LISTEN) httpd 56048 root 4u IPv6 0x123456789abcdef 0t0 TCP *:http (LISTEN) httpd 56055 _www 4u IPv6 0x123456789abcdef 0t0 TCP *:http (LISTEN) 

Хит Apache с проверкой состояния:

$ apachectl status Go to http://localhost:80/server-status in the web browser of your choice. Note that mod_status must be enabled for this to work. 

Давайте попробуем эту ссылку:

$ curl http://localhost:80/server-status <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You don't have permission to access /server-status on this server.<br /> </p> </body></html> 

Хорошо, тогда давайте попробуем исправить httpd.conf и перезапустить Apache:

$ sudo nano /etc/apache2/httpd.conf $ sudo apachectl restart AH00557: httpd: apr_sockaddr_info_get() failed for My-MacBook-Pro.local AH00558: httpd: Could not reliably determine the server's fully  qualified domain name, using 127.0.0.1. Set the 'ServerName' directive  globally to suppress this message 

О, и просто для подтверждения в /etc/apache2/httpd.conf у меня есть обе эти строки без комментариев:

ServerName localhost  LoadModule status_module libexec/apache2/mod_status.so 

Что не так с Apache, и как мне все это остановить, чтобы я мог начать все сначала?

3
Взглянув на проблему и на команды ... И все же первым делом я хотел попросить вас убедиться, что ваш Apache также обновлен. Я делал это не раз. Обновите PHP, уууу! Разбитый. Обновление Apache в порядке исправлено. Убедитесь, что вы заходите на сайт Apache, нажимаете все обновленные ссылки и обновляете их все. Иногда новый PHP не работает, если что-то еще не получило обновления. Включая ссылку на C ++, которая ему тоже нужна. ejbytes 7 лет назад 0

2 ответа на вопрос

2
moonpoint

Если вы успешно остановите Apache с помощью команды sudo apachectl stop, вы все равно увидите вывод, который вы увидели при вводе apachectl statusкоманды. Например, я вижу, что Apache прослушивает порт 80 в моей системе OS X El Capitan с помощью команды netstat, остановите его, проверьте состояние, которое показывает то же сообщение, которое вы опубликовали, но убедитесь, что Apache больше не прослушивает порт 80 ,

$ netstat -an | grep '.80' | grep -i Listen tcp46 0 0 *.80 *.* LISTEN $ sudo apachectl stop Password: $ apachectl status Go to http://localhost:80/server-status in the web browser of your choice. Note that mod_status must be enabled for this to work. $ netstat -an | grep '.80' | grep -i Listen $ 

Таким образом, просмотр этого вывода apachectl statusне означает, что Apache все еще работает. Вы можете проверить, что он больше не прослушивает порт 80, с помощью команды netstat -an | grep '.80' | grep -i Listenили проверить, работает ли процесс Apache httpd, как показано ниже.

$ ps aux | grep httpd | grep -v grep _www 45379 0.0 0.0 2509492 1084 ?? S 6:27PM 0:00.00 /usr/sbin/httpd -D FOREGROUND root 45376 0.0 0.1 2511540 11292 ?? Ss 6:27PM 0:00.19 /usr/sbin/httpd -D FOREGROUND $ sudo apachectl stop Password: $ ps aux | grep httpd | grep -v grep $ 

Сообщение об ошибке «403 запрещено» может быть связано с проблемой прав доступа к файлу . Если вы поместите какой-нибудь html-файл в каталог DocumentRoot с доступом для чтения всем, например, chmod 644 index.htmlи попытаетесь получить к нему доступ, что вы увидите? Вы также можете найти ключ к проблеме, с которой столкнулись, изучив файл журнала ошибок Apache. Вы можете увидеть местоположение файла с помощью apachectl -Sкоманды. Например:

$ apachectl -S AH00557: httpd: apr_sockaddr_info_get() failed for GSSLA15122293 AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message VirtualHost configuration: *:80 myserver.example.com (/private/etc/apache2/extra/httpd-vhosts.conf:24) ServerRoot: "/usr" Main DocumentRoot: "/Library/WebServer/Documents" Main ErrorLog: "/private/var/log/apache2/error_log" Mutex proxy: using_defaults Mutex default: dir="/private/var/run/" mechanism=default Mutex mpm-accept: using_defaults Mutex proxy-balancer-shm: using_defaults PidFile: "/private/var/run/httpd.pid" Define: DUMP_VHOSTS Define: DUMP_RUN_CFG User: name="_www" id=70 not_used Group: name="_www" id=70 not_used 

Вывод выше - это то, что я вижу в моей системе. Несмотря на то, что Apache жалуется, что он «не может надежно определить полное доменное имя сервера», я могу получить доступ к файлу index.html, который я поместил в свой каталог DocumentRoot, через http: // localhost, хотя я установил ServerNameи DocumentRootв разделе VirtualHost в /private/etc/apache2/extra/httpd-vhosts.conf . «Не удалось надежно определить полное доменное имя сервера» не означает, что Apache не прослушивает соединения. Это происходит, если вы получаете ошибку «403 Forbidden» при попытке доступа к странице на сервере, потому что это сообщение об ошибке, возвращаемое веб-сервером.

2
kenorb

Поскольку вы установили PHP через Homebrew, я полагаю, что у вас есть несколько установок Apache, поэтому убедитесь, что вы используете правильную версию.

Прежде всего, проверьте различные версии apachectl, запустив: which -a apachectl.

Затем, чтобы проверить, какой файл конфигурации Apache связан с каким apachectl, запустите:

apachectl -t -D DUMP_INCLUDES 

Если вы планируете запустить Apache с Sierra, введите префикс с правильным путем, например:

/usr/sbin/apachectl -t -D DUMP_INCLUDES /usr/sbin/apachectl start