web-dev-qa-db-ja.com

Sierraに同梱されているApacheは、停止、再起動、または新しい構成の受け入れを行いません

最近、MacOSSierraに自作でPHP-7.1をインストールしましたが、すべてが機能しなくなりました。奇妙なエラー、権限の問題など。今、私は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

Homebrew経由でPHPをインストールしたので、Apacheを複数インストールしたと思います。正しいものを実行していることを確認してください。

まず、次のコマンドを実行して、さまざまなバージョンのapachectlを確認します。which -a apachectl

次に、どのApache構成ファイルがどのapachectlに関連付けられているかを確認するには、次のコマンドを実行します。

apachectl -t -D DUMP_INCLUDES

Sierraに同梱されているApacheの起動を計画している場合は、正しいパスをプレフィックスとして付けます。例:

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

コマンドSudo apachectl stopを使用してApacheを正常に停止した場合でも、apachectl statusコマンドを発行したときに表示された出力が表示されます。たとえば、ApacheがOS X El Capitanシステムのポート80で 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がまだ実行されていることを意味するわけではありません。コマンドnetstat -an | grep '.80' | grep -i Listenを使用して、ポート80でリッスンしていないことを確認するか、以下に示すようにApache process 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
$

「403Forbidden」エラーメッセージは、 ファイルパーミッション の問題が原因である可能性があります。 chmod 644 index.htmlなど、すべてに読み取りアクセスが許可されたhtmlファイルをDocumentRootディレクトリに配置してアクセスしようとすると、何が表示されますか?また、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が「サーバーの完全修飾ドメイン名を確実に判別できなかった」と文句を言っていても、DocumentRootディレクトリに配置したindex.htmlファイルに http:// localhost 経由でアクセスできます。 / private/etc/Apache2/extra/httpd-vhosts.confのVirtualHostセクションServerNameDocumentRootを設定します。 「サーバーの完全修飾ドメイン名を確実に判別できなかった」とは、Apacheが接続をリッスンしていないことを意味するものではありません。これは、サーバー上のページにアクセスしようとしたときに「403 Forbidden」エラーが発生した場合です。これは、Webサーバーから返されるエラーメッセージであるためです。

2
moonpoint