3

Я недавно установил 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, и как мне все это остановить, чтобы я мог начать все сначала?

2 ответа2

2

Поскольку вы установили 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
2

Если вы успешно остановите 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" при попытке доступа к странице на сервере, потому что это сообщение об ошибке, возвращаемое веб-сервером.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .