質問: 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の何が問題になっていますか。また、最初からやり直すことができるように、すべてを停止するにはどうすればよいですか?
回答: コマンド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サーバーから返されるエラーメッセージであるためです。