最近、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の何が問題になっていますか。また、最初からやり直すことができるように、すべてを停止するにはどうすればよいですか?
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
コマンド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セクション にServerName
とDocumentRoot
を設定します。 「サーバーの完全修飾ドメイン名を確実に判別できなかった」とは、Apacheが接続をリッスンしていないことを意味するものではありません。これは、サーバー上のページにアクセスしようとしたときに「403 Forbidden」エラーが発生した場合です。これは、Webサーバーから返されるエラーメッセージであるためです。