「Apache HTTP Server」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(1版 をインポートしました)
(文字列「http://httpd.apache.org/」を「https://httpd.apache.org/」に置換)
 
(2人の利用者による、間の7版が非表示)
1行目: 1行目:
 
[[Category:ウェブサーバー]]
 
[[Category:ウェブサーバー]]
[[cs:LAMP]]
+
[[cs:Apache HTTP Server]]
 
[[de:LAMP Installation]]
 
[[de:LAMP Installation]]
[[el:LAMP]]
+
[[el:Apache HTTP Server]]
[[en:LAMP]]
+
[[en:Apache HTTP Server]]
[[es:LAMP]]
+
[[es:Apache HTTP Server]]
  +
[[fa:LAMP]]
 
[[fr:Lamp]]
 
[[fr:Lamp]]
[[it:LAMP]]
+
[[it:Apache HTTP Server]]
  +
[[ko:Apache HTTP Server]]
[[pl:LAMP]]
 
  +
[[pl:Apache HTTP Server]]
[[ru:LAMP]]
 
  +
[[ru:Apache HTTP Server]]
[[sr:LAMP]]
 
  +
[[sr:Apache HTTP Server]]
 
[[tr:LAMP]]
 
[[tr:LAMP]]
[[zh-CN:LAMP]]
+
[[zh-hans:Apache HTTP Server]]
 
{{Related articles start}}
 
{{Related articles start}}
{{Related2|PHP|PHP}}
+
{{Related|PHP}}
{{Related2|MySQL|MySQL}}
+
{{Related|MySQL}}
 
{{Related|PhpMyAdmin}}
 
{{Related|PhpMyAdmin}}
 
{{Related|Adminer}}
 
{{Related|Adminer}}
22行目: 24行目:
 
[[Wikipedia:Apache HTTP Server|Apache HTTP Server]]、略して Apache は Apache Software Foundation によって開発されている、人気のウェブサーバーです。
 
[[Wikipedia:Apache HTTP Server|Apache HTTP Server]]、略して Apache は Apache Software Foundation によって開発されている、人気のウェブサーバーです。
   
Apache は PHP などのスクリプト言語や MySQL などのデータベースと一緒に使われることがほとんどです。この組み合わせは [[Wikipedia:ja:LAMP|LAMP]] ('''L'''inux, '''A'''pache, '''M'''ySQL, '''P'''HP) と呼ばれています。この記事では Apache を設定する方法と [[PHP|PHP]] や [[MySQL|MySQL]] と統合する方法を説明しています。
+
Apache は PHP などのスクリプト言語や MySQL などのデータベースと一緒に使われることがほとんどです。この組み合わせは [[Wikipedia:ja:LAMP|LAMP]] ('''L'''inux, '''A'''pache, '''M'''ySQL, '''P'''HP) と呼ばれています。この記事では Apache を設定する方法と [[PHP]] や [[MySQL]] と統合する方法を説明しています。
   
 
== インストール ==
 
== インストール ==
54行目: 56行目:
 
:ウェブページを置くディレクトリです。
 
:ウェブページを置くディレクトリです。
   
:必要に応じて変更してかまいませんが、{{ic|<Directory "/srv/http">}} も {{ic|DocumentRoot}} と同じように忘れずに変更しないと、新しいドキュメントルートにアクセスしたときに '''403 Error''' (権限不足) が表示されることになります。{{ic|Require all denied}} 行を変更するのも忘れないで下さい、そうしないと '''403 Error''' になります。
+
:必要に応じて変更してかまいませんが、{{ic|<Directory "/srv/http">}} も {{ic|DocumentRoot}} と同じように忘れずに変更しないと、新しいドキュメントルートにアクセスしたときに '''403 Error''' (権限不足) が表示されることになります。{{ic|Require all denied}} 行を {{ic|Require all granted}} に変更するのも忘れないで下さい、そうしないと '''403 Error''' になります。また、DocumentRoot ディレクトリとその親ディレクトリには実行権限を与える必要があります ({{ic|chmod o+x /path/to/DocumentRoot}} で設定できます)。それを設定してない場合も '''403 Error''' になります。
   
 
AllowOverride None
 
AllowOverride None
:{{ic|<Directory>}} セクションにこのディレクティブを記述すると Apache は {{ic|.htaccess}} ファイルを完全に無視するようになります。{{ic|mod_rewrite}} などの設定を {{ic|.htaccess}} ファイルで用いる場合は、ファイルのどのディレクティブがサーバー設定を上書きできるようにするか許可できます。詳しくは [http://httpd.apache.org/docs/current/mod/core.html#allowoverride Apache のドキュメント] を参照。
+
:{{ic|<Directory>}} セクションにこのディレクティブを記述すると Apache は {{ic|.htaccess}} ファイルを完全に無視するようになります。{{ic|mod_rewrite}} などの設定を {{ic|.htaccess}} ファイルで用いる場合は、ファイルのどのディレクティブがサーバー設定を上書きできるようにするか許可できます。詳しくは [https://httpd.apache.org/docs/current/mod/core.html#allowoverride Apache のドキュメント] を参照。
   
 
{{Tip|設定に問題がある場合は、Apache で設定をチェックすることが可能です: {{ic|apachectl configtest}}。}}
 
{{Tip|設定に問題がある場合は、Apache で設定をチェックすることが可能です: {{ic|apachectl configtest}}。}}
78行目: 80行目:
 
$ chmod o+x ~
 
$ chmod o+x ~
 
$ chmod o+x ~/public_html
 
$ chmod o+x ~/public_html
  +
$ chmod -R o+r ~/public_html
   
変更を適用するために {{ic|httpd.service}} を再起動して下さい。
+
変更を適用するために {{ic|httpd.service}} を再起動して下さい。[[Umask#マスクの値を設定]]も参照
   
 
=== TLS/SSL ===
 
=== TLS/SSL ===
 
TLS/SSL を使うには、{{pkg|openssl}} をインストールする必要があります。
 
TLS/SSL を使うには、{{pkg|openssl}} をインストールする必要があります。
   
  +
{{ic|/etc/httpd/conf/httpd.conf}} の以下の3行をアンコメントしてください:
自己署名証明書を作成 (キーのサイズや効力の日数は変更できます):
 
# cd /etc/httpd/conf
 
# openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out server.key
 
# chmod 600 server.key
 
# openssl req -new -key server.key -out server.csr
 
# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
 
 
そして {{ic|/etc/httpd/conf/httpd.conf}} の、以下の3行をアンコメント:
 
 
LoadModule ssl_module modules/mod_ssl.so
 
LoadModule ssl_module modules/mod_ssl.so
 
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
 
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
 
Include conf/extra/httpd-ssl.conf
 
Include conf/extra/httpd-ssl.conf
  +
  +
自己署名証明書を作成:
  +
# cd /etc/httpd/conf
  +
# openssl req -new -x509 -nodes -newkey rsa:4096 -keyout server.key -out server.crt -days 1095
  +
# chmod 400 server.key
  +
# chmod 444 server.crt
  +
  +
{{Note|-days スイッチは任意であり RSA 鍵のサイズは 2048 (デフォルト) まで小さくできます。}}
  +
  +
{{ic|/etc/httpd/conf/extra/httpd-ssl.conf}} の {{ic|SSLCertificateFile}} と {{ic|SSLCertificateKeyFile}} 行で作成した鍵と証明書を指定してください。
  +
  +
[[wikipedia:Certificate signing request|CSR]] を作成する必要がある場合、上記のコマンドを以下のように変えてください:
  +
  +
# cd /etc/httpd/conf
  +
# openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out server.key
  +
# chmod 400 server.key
  +
# openssl req -new -sha256 -key server.key -out server.csr
  +
# openssl x509 -req -days 1095 -in server.csr -signkey server.key -out server.crt
  +
  +
{{Note|他の openssl のオプションについては、[https://www.openssl.org/docs/apps/openssl.html man ページ] や openssl の [https://www.openssl.org/docs/ ドキュメント] を読んでください。}}
  +
  +
{{Warning|SSL/TLS を使用するときは、実装によっては [https://weakdh.org/#affected いまだに] [[wikipedia:Transport_Layer_Security#Attacks_against_TLS.2FSSL|脆弱性が存在する]]ことを理解してください。SSL/TLS における脆弱性については http://disablessl3.com/ や https://weakdh.org/sysadmin.html を参照。}}
  +
  +
{{Tip|Mozilla は [https://wiki.mozilla.org/Security/Server_Side_TLS#Apache Apache] の設定ガイドラインが書かれている [https://wiki.mozilla.org/Security/Server_Side_TLS SSL/TLS の記事] と、セキュアな設定を作成するのに役立つ [https://mozilla.github.io/server-side-tls/ssl-config-generator/ 自動化ツール] を提供しています。}}
   
 
{{ic|httpd.service}} を再起動して変更を適用してください。
 
{{ic|httpd.service}} を再起動して変更を適用してください。
168行目: 188行目:
 
=== PHP ===
 
=== PHP ===
   
[[PHP|PHP]] をインストールするには、[[公式リポジトリ]]から {{Pkg|php}} と {{Pkg|php-apache}} を[[インストール]]してください。
+
[[PHP]] をインストールするには、[[公式リポジトリ]]から {{Pkg|php}} と {{Pkg|php-apache}} を[[インストール]]してください。
   
  +
{{ic|/etc/httpd/conf/httpd.conf}} の以下の行をコメントアウトしてください:
{{Note|1={{pkg|php-apache}} に含まれている {{ic|libphp5.so}} は {{ic|mod_mpm_event}} で動作しません ({{bug|39218}})。代わりに {{ic|mod_mpm_prefork}} を使って下さい。そうしないと以下のエラーが表示されます:
 
  +
#LoadModule mpm_event_module modules/mod_mpm_event.so
  +
そして次の行をアンコメントしてください:
  +
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
  +
  +
{{Note|1={{pkg|php-apache}} に含まれている {{ic|libphp7.so}} は {{ic|mod_mpm_event}} で機能せず、{{ic|mod_mpm_prefork}} でしか動作しないために上記の設定が必要になっています ({{bug|39218}})。設定しないと以下のエラーが表示されます:
 
{{bc|1=Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP.
 
{{bc|1=Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP.
 
AH00013: Pre-configuration failed
 
AH00013: Pre-configuration failed
 
httpd.service: control process exited, code=exited status=1}}
 
httpd.service: control process exited, code=exited status=1}}
  +
他の方法として、{{ic|mod_proxy_fcgi}} を使うこともできます (下の [[#php-fpm と mod_proxy_fcgi を使う]] を参照)。
 
{{ic|mod_mpm_prefork}} を使うには、{{ic|/etc/httpd/conf/httpd.conf}} を開いて次の行を:
 
{{bc|LoadModule mpm_event_module modules/mod_mpm_event.so}}
 
以下のように置き換えてください:
 
{{bc|LoadModule mpm_prefork_module modules/mod_mpm_prefork.so}}
 
 
他の方法として、{{ic|mod_proxy_fcgi}} を使うこともできます (下の [[#php-fpm と mod_proxy_fcgi で php5 を使う]] を参照)。
 
 
}}
 
}}
   
 
PHP を有効にするには、以下の行を {{ic|/etc/httpd/conf/httpd.conf}} に追加してください:
 
PHP を有効にするには、以下の行を {{ic|/etc/httpd/conf/httpd.conf}} に追加してください:
 
*次の行を {{ic|LoadModule}} リストの {{ic|LoadModule dir_module modules/mod_dir.so}} の後のどこかに記述:
 
*次の行を {{ic|LoadModule}} リストの {{ic|LoadModule dir_module modules/mod_dir.so}} の後のどこかに記述:
LoadModule php5_module modules/libphp5.so
+
LoadModule php7_module modules/libphp7.so
  +
AddHandler php7-script php
 
*次の行を {{ic|Include}} リストの最後に記述:
 
*次の行を {{ic|Include}} リストの最後に記述:
Include conf/extra/php5_module.conf
+
Include conf/extra/php7_module.conf
 
{{ic|DocumentRoot}} が {{ic|/srv/http}} ではない場合、次のように {{ic|/etc/php/php.ini}} の {{ic|open_basedir}} に追加してください:
 
open_basedir=/srv/http/:/home/:/tmp/:/usr/share/pear/:/path/to/documentroot
 
   
 
[[systemd#ユニットを使う|systemd]] を使って {{ic|httpd.service}} を再起動して下さい。
 
[[systemd#ユニットを使う|systemd]] を使って {{ic|httpd.service}} を再起動して下さい。
198行目: 215行目:
 
動作するか確かめるために次のページを見て下さい: http://localhost/test.php or http://localhost/~myname/test.php
 
動作するか確かめるために次のページを見て下さい: http://localhost/test.php or http://localhost/~myname/test.php
   
高度な設定や拡張については、[[PHP|PHP]] を読んで下さい。
+
高度な設定や拡張については、[[PHP]] を読んで下さい。
   
==== php-fpm と mod_proxy_fcgi で php5 を使う ====
+
==== php-fpm と mod_proxy_fcgi を使う ====
   
{{Note|Unlike the widespread setup with ProxyPass, the proxy configuration with SetHandler respects other Apache directives like DirectoryIndex. This ensures a better compatibility with software designed for libphp5, mod_fastcgi and mod_fcgid. If you still want to try ProxyPass, experiment with a line like this: {{bc|ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php-fpm/php-fpm.sock&#124;fcgi://localhost/srv/http/$1}}}}
+
{{Note|Unlike the widespread setup with ProxyPass, the proxy configuration with SetHandler respects other Apache directives like DirectoryIndex. This ensures a better compatibility with software designed for libphp7, mod_fastcgi and mod_fcgid. If you still want to try ProxyPass, experiment with a line like this: {{bc|ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php-fpm/php-fpm.sock&#124;fcgi://localhost/srv/http/$1}}}}
   
* {{pkg|php-fpm}} をインストール
+
{{pkg|php-fpm}} をインストールしてください。
   
* {{ic|/etc/php/php-fpm.conf}} で {{ic|listen}} を以下のように設定:
+
以下の内容で {{ic|/etc/httpd/conf/extra/php-fpm.conf}} を作成:
  +
{{hc|/etc/httpd/conf/extra/php-fpm.conf|<nowiki>
;listen = 127.0.0.1:9000
 
  +
<FilesMatch \.php$>
listen = /run/php-fpm/php-fpm.sock
 
  +
SetHandler "proxy:unix:/run/php-fpm/php-fpm.sock|fcgi://localhost/"
listen.owner = http
 
  +
</FilesMatch>
listen.group = http
 
  +
<Proxy "fcgi://localhost/" enablereuse=on max=10>
  +
</Proxy>
  +
<IfModule dir_module>
  +
DirectoryIndex index.php index.html
  +
</IfModule>
  +
</nowiki>}}
   
* 以下を {{ic|/etc/httpd/conf/httpd.conf}} に追:
+
{{ic|/etc/httpd/conf/httpd.conf}} の最後作成したファイルを加してください:
  +
Include conf/extra/php-fpm.conf
<FilesMatch \.php$>
 
SetHandler "proxy:unix:/run/php-fpm/php-fpm.sock|fcgi://localhost/"
 
</FilesMatch>
 
<IfModule dir_module>
 
DirectoryIndex index.php index.html
 
</IfModule>
 
   
  +
{{Note|{{ic|sock}} と {{ic|fcgi}} の間のパイプを空白で囲むことはできません。{{ic|localhost}} はどんな文字列でも置き換えられますが {{ic|SetHandler}} と {{ic|Proxy}} ディレクティブに一致させる必要があります。詳しくは [https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html] を参照。{{ic|SetHandler}} と {{ic|Proxy}} はバーチャルホストごとの設定で使うことができますが、{{ic|fcgi://}} の後ろの名前はバーチャルホストごとに変える必要があります。}}
* 前に php モジュールを追加していた場合は、必要なくなるので削除:
 
LoadModule php5_module modules/libphp5.so
 
   
  +
PHP-FPM の設定は {{ic|/etc/php/php-fpm.d/www.conf}} で行えます。特に変えなくても問題なく動作するはずです。
* {{ic|httpd}} と {{ic|php-fpm}} デーモンを[[Systemd#ユニットを使う|再起動]]:
 
# systemctl restart httpd.service php-fpm.service
 
   
  +
{{Note|
==== apache2-mpm-worker, mod_fcgid で php5 を使う ====
 
  +
{{ic|httpd.conf}} に以下の行を追加している場合、すでに必要ないので削除してかまいません:
* {{ic|/etc/conf.d/apache}} の次の行をアンコメント:
 
  +
LoadModule php7_module modules/libphp7.so
HTTPD=/usr/bin/httpd.worker
 
  +
Include conf/extra/php7_module.conf
  +
}}
   
  +
{{ic|httpd.service}} と {{ic|php-fpm.service}} を[[systemd#ユニットを使う|再起動]]してください。
* {{ic|/etc/httpd/conf/httpd.conf}} の次の行をアンコメント:
 
Include conf/extra/httpd-mpm.conf
 
   
  +
==== apache2-mpm-worker と mod_fcgid を使う ====
* [[公式リポジトリ]]から {{pkg|mod_fcgid}} と {{Pkg|php-cgi}} パッケージを[[インストール]]。
 
  +
{{pkg|mod_fcgid}} と {{Pkg|php-cgi}} パッケージを[[インストール]]してください。
   
  +
必要なディレクトリと PHP ラッパーのシンボリックリンクを作成:
* {{ic|/etc/httpd/conf/extra/php5_fcgid.conf}} を以下の内容で作成:
 
  +
# mkdir /srv/http/fcgid-bin
{{hc|/etc/httpd/conf/extra/php5_fcgid.conf|<nowiki>
 
  +
# ln -s /usr/bin/php-cgi /srv/http/fcgid-bin/php-fcgid-wrapper
  +
  +
{{ic|/etc/conf.d/apache}} の以下の行をアンコメント:
  +
HTTPD=/usr/bin/httpd.worker
  +
  +
以下の内容で {{ic|/etc/httpd/conf/extra/php-fcgid.conf}} を作成:
  +
{{hc|/etc/httpd/conf/extra/php-fcgid.conf|<nowiki>
 
# Required modules: fcgid_module
 
# Required modules: fcgid_module
   
258行目: 283行目:
 
Options +ExecCGI
 
Options +ExecCGI
 
</Location>
 
</Location>
</IfModule></nowiki>
+
</IfModule>
  +
</nowiki>}}
}}
 
   
  +
{{ic|/etc/httpd/conf/httpd.conf}} を編集して actions モジュールを有効化:
* 必要なディレクトリを作成し PHP ラッパーにシンボリックリンクを作成:
 
  +
LoadModule actions_module modules/mod_actions.so
# mkdir /srv/http/fcgid-bin
 
# ln -s /usr/bin/php-cgi /srv/http/fcgid-bin/php-fcgid-wrapper
 
   
  +
そして以下の行を追加:
* {{ic|/etc/httpd/conf/httpd.conf}} を編集:
 
#LoadModule php5_module modules/libphp5.so
 
 
LoadModule fcgid_module modules/mod_fcgid.so
 
LoadModule fcgid_module modules/mod_fcgid.so
Include conf/extra/php5_fcgid.conf
+
Include conf/extra/httpd-mpm.conf
  +
Include conf/extra/php-fcgid.conf
そして {{ic|httpd}} を[[Daemons|再起動]]。
 
   
  +
{{Note|
{{Note|1=As of Apache 2.4 you can now use [http://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html mod_proxy_fcgi] (part of the official distribution) with PHP-FPM (and the new event MPM). See this [http://wiki.apache.org/httpd/PHP-FPM configuration example].}}
 
  +
{{ic|httpd.conf}} に以下の行を追加している場合、もはや必要ないので削除してかまいません:
  +
LoadModule php7_module modules/libphp7.so
  +
Include conf/extra/php7_module.conf
  +
}}
  +
  +
{{ic|httpd.service}} を[[systemd#ユニットを使う|再起動]]してください。
   
 
=== MySQL/MariaDB ===
 
=== MySQL/MariaDB ===
[[MariaDB|MariaDB]] で説明されているように MySQL/MariaDB を設定してください。
+
[[MariaDB]] で説明されているように MySQL/MariaDB を設定してください。
   
 
{{ic|/etc/php/php.ini}} の以下の行の [http://www.php.net/manual/ja/mysqlinfo.api.choosing.php 少なくともどちらか一行] をアンコメント:
 
{{ic|/etc/php/php.ini}} の以下の行の [http://www.php.net/manual/ja/mysqlinfo.api.choosing.php 少なくともどちらか一行] をアンコメント:
285行目: 314行目:
 
[[systemd#ユニットを使う|systemd]] を使って {{ic|httpd.service}} を再起動します。
 
[[systemd#ユニットを使う|systemd]] を使って {{ic|httpd.service}} を再起動します。
   
{{Tip|データベースを利用するために [[phpMyAdmin]], [[Adminer]], {{AUR|mysql-workbench}} などのツールをインストールしても良いでしょう。}}
+
{{Tip|データベースを利用するために [[phpMyAdmin]], [[Adminer]], {{Pkg|mysql-workbench}} などのツールをインストールしても良いでしょう。}}
  +
  +
=== HTTP2 ===
  +
  +
HTTP/2 のサポートを有効にするには、{{Pkg|nghttp2}} パッケージをインストールして {{ic|httpd.conf}} の以下の行をアンコメント:
  +
LoadModule http2_module modules/mod_http2.so
  +
  +
そして以下の行を追加:
  +
Protocols h2 http/1.1
  +
  +
詳しくは [https://httpd.apache.org/docs/2.4/mod/mod_http2.html mod_http2] のドキュメントを参照してください。
   
 
== トラブルシューティング ==
 
== トラブルシューティング ==
292行目: 331行目:
   
 
Apache のログがある場所は: {{ic|/var/log/httpd/}}
 
Apache のログがある場所は: {{ic|/var/log/httpd/}}
  +
 
=== Error: PID file /run/httpd/httpd.pid not readable (yet?) after start ===
 
=== Error: PID file /run/httpd/httpd.pid not readable (yet?) after start ===
 
unique_id_module をコメントアウトしてください: {{ic|#LoadModule unique_id_module modules/mod_unique_id.so}}
 
unique_id_module をコメントアウトしてください: {{ic|#LoadModule unique_id_module modules/mod_unique_id.so}}
  +
 
=== Apache を 2.2 から 2.4 にアップグレード ===
 
=== Apache を 2.2 から 2.4 にアップグレード ===
 
{{ic|php-apache}} を使っている場合、[[#PHP|PHP]] の最初のノートを見て下さい。
 
{{ic|php-apache}} を使っている場合、[[#PHP|PHP]] の最初のノートを見て下さい。
   
Access Control は変更されました。{{ic|Order}}, {{ic|Allow}}, {{ic|Deny}}, {{ic|Satisfy}} ディレクティブは全て新しい {{ic|Require}} シンタックスに変換してください。[http://httpd.apache.org/docs/2.4/mod/mod_access_compat.html mod_access_compat] を使うことで移行期間の古いフォーマットを使用することができます。
+
Access Control は変更されました。{{ic|Order}}, {{ic|Allow}}, {{ic|Deny}}, {{ic|Satisfy}} ディレクティブは全て新しい {{ic|Require}} シンタックスに変換してください。[https://httpd.apache.org/docs/2.4/mod/mod_access_compat.html mod_access_compat] を使うことで移行期間の古いフォーマットを使用することができます。
   
詳細: [http://httpd.apache.org/docs/2.4/upgrading.html Upgrading to 2.4 from 2.2]
+
詳細: [https://httpd.apache.org/docs/2.4/upgrading.html Upgrading to 2.4 from 2.2]
   
 
=== Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe ===
 
=== Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe ===
   
{{ic|php5_module}} をロードする際に {{ic|httpd.service}} が失敗して、journal で以下のようなエラーが表示される場合:
+
{{ic|php7_module}} をロードする際に {{ic|httpd.service}} が失敗して、journal で以下のようなエラーが表示される場合:
   
 
Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP.
 
Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP.
312行目: 353行目:
 
<s>LoadModule mpm_event_module modules/mod_mpm_event.so</s>
 
<s>LoadModule mpm_event_module modules/mod_mpm_event.so</s>
 
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
 
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
  +
}}
  +
  +
そして {{ic|httpd.service}} を再起動してください。
  +
  +
=== AH00534: httpd: Configuration error: No MPM loaded. ===
  +
  +
アップグレードによってこのエラーが発生することがあります。{{ic|httpd.conf}} の変化に対応してないのが原因です。修正するには、以下の行をアンコメントしてください:
  +
  +
{{hc|/etc/httpd/conf/httpd.conf|
  +
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
  +
}}
  +
  +
また、他にもエラーが発生する場合は[[#Apache_is_running_a_threaded_MPM.2C_but_your_PHP_Module_is_not_compiled_to_be_threadsafe.|上記のセクション]]も参照。
  +
  +
=== AH00072: make_sock: could not bind to address ===
  +
  +
原因は複数考えられます。最も一般的な原因は既に別の何かがポートを listen している場合です。netstat で確認してください:
  +
  +
# netstat -lnp | grep -e :80 -e :443
  +
  +
何か出力された場合、ポートを占有しているサービスを停止してみてください。
  +
  +
何らかの理由で Apache が root で起動していない可能性もあります。手動で起動してみて AH0072 エラーが発生しないか確認してください。
  +
  +
# /usr/bin/httpd -k start
  +
  +
あとは設定に問題があるためにポートに何度も listen しようとしている可能性があります。悪い設定の例:
  +
  +
Listen 0.0.0.0:80
  +
Listen [::]:80
  +
  +
=== php.ini の max_execution_time を変更しても反映されない ===
  +
  +
{{ic|php.ini}} の {{ic|max_execution_time}} を 30 (秒) 以上の値に設定しても、30秒後に Apache から {{ic|503 Service Unavailable}} が返ってくることがあります。この問題を解決するには、http 設定の {{ic|<FilesMatch \.php$>}} ブロックの直前に {{ic|ProxyTimeout}} ディレクティブを追加してください:
  +
  +
{{hc|/etc/httpd/conf/httpd.conf|
  +
ProxyTimeout 300
 
}}
 
}}
   

2018年2月7日 (水) 00:16時点における最新版

関連記事

Apache HTTP Server、略して Apache は Apache Software Foundation によって開発されている、人気のウェブサーバーです。

Apache は PHP などのスクリプト言語や MySQL などのデータベースと一緒に使われることがほとんどです。この組み合わせは LAMP (Linux, Apache, MySQL, PHP) と呼ばれています。この記事では Apache を設定する方法と PHPMySQL と統合する方法を説明しています。

インストール

公式リポジトリから apacheインストールしてください。

設定

Apache の設定ファイルは /etc/httpd/conf にあります。メインの設定ファイルは /etc/httpd/conf/httpd.conf で、他の様々な設定ファイルも含まれています。シンプルなセットアップであればデフォルトの設定で問題ありません。デフォルトでは、/srv/http ディレクトリがウェブサイトに訪れた人に見れるようになっています。

Apache を起動するには、systemd を使って httpd.service を起動してください。

それで Apache が実行されます。ウェブブラウザで http://localhost/ を開いて確認できます。シンプルなインデックスページが表示されるはずです。

任意の設定については次のセクションを見て下さい。

高度なオプション

以下のオプションは /etc/httpd/conf/httpd.conf で設定できます:

User http
セキュリティ上の理由で、root ユーザーによって Apache が (直接またはスタートアップスクリプトによって) 起動されるとすぐに指定された UID/GID に切り替わるようになっています。デフォルトはユーザー http で、インストール中に自動で作成されます。
Listen 80
Apache が使用するポートです。ルーターを使ってインターネットにアクセスする場合は、このポートを開いておく必要があります。
Apache をローカルでの開発のためにセットアップする場合はあなたのコンピュータからしかアクセスできないようにすると良いでしょう。その場合はこの行を Listen 127.0.0.1:80 に変更してください。
ServerAdmin you@example.com
エラーページなどで表示される管理者のメールアドレスです。
DocumentRoot "/srv/http"
ウェブページを置くディレクトリです。
必要に応じて変更してかまいませんが、<Directory "/srv/http">DocumentRoot と同じように忘れずに変更しないと、新しいドキュメントルートにアクセスしたときに 403 Error (権限不足) が表示されることになります。Require all denied 行を Require all granted に変更するのも忘れないで下さい、そうしないと 403 Error になります。また、DocumentRoot ディレクトリとその親ディレクトリには実行権限を与える必要があります (chmod o+x /path/to/DocumentRoot で設定できます)。それを設定してない場合も 403 Error になります。
AllowOverride None
<Directory> セクションにこのディレクティブを記述すると Apache は .htaccess ファイルを完全に無視するようになります。mod_rewrite などの設定を .htaccess ファイルで用いる場合は、ファイルのどのディレクティブがサーバー設定を上書きできるようにするか許可できます。詳しくは Apache のドキュメント を参照。
ヒント: 設定に問題がある場合は、Apache で設定をチェックすることが可能です: apachectl configtest

/etc/httpd/conf/extra/httpd-default.conf では以下の設定が使えます:

サーバーの署名を表示しないようにするには:

ServerSignature Off

Apache や PHP のバージョンなどのサーバー情報を表示しないようにするには:

ServerTokens Prod

ユーザーディレクトリ

デフォルトではユーザーディレクトリは http://localhost/~yourusername/ から見れるようになっており ~/public_html の中身が表示されます (これは /etc/httpd/conf/extra/httpd-userdir.conf で変更可能です)。

ウェブ上でユーザーディレクトリが見れないようにしたい場合は、/etc/httpd/conf/httpd.conf の以下の行をコメントアウトしてください:

Include conf/extra/httpd-userdir.conf

Apache が取得できるようにホームディレクトリのパーミッションが正しく設定されているか確認する必要があります。ホームディレクトリと ~/public_html/ は他者 ("rest of the world") にも実行可能でなければなりません。以下のコマンドでパーミッションを変更できます:

$ chmod o+x ~
$ chmod o+x ~/public_html
$ chmod -R o+r ~/public_html

変更を適用するために httpd.service を再起動して下さい。Umask#マスクの値を設定も参照。

TLS/SSL

TLS/SSL を使うには、openssl をインストールする必要があります。

/etc/httpd/conf/httpd.conf の以下の3行をアンコメントしてください:

LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
Include conf/extra/httpd-ssl.conf

自己署名証明書を作成:

# cd /etc/httpd/conf
# openssl req -new -x509 -nodes -newkey rsa:4096 -keyout server.key -out server.crt -days 1095
# chmod 400 server.key
# chmod 444 server.crt
ノート: -days スイッチは任意であり RSA 鍵のサイズは 2048 (デフォルト) まで小さくできます。

/etc/httpd/conf/extra/httpd-ssl.confSSLCertificateFileSSLCertificateKeyFile 行で作成した鍵と証明書を指定してください。

CSR を作成する必要がある場合、上記のコマンドを以下のように変えてください:

# cd /etc/httpd/conf
# openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out server.key
# chmod 400 server.key
# openssl req -new -sha256 -key server.key -out server.csr
# openssl x509 -req -days 1095 -in server.csr -signkey server.key -out server.crt
ノート: 他の openssl のオプションについては、man ページ や openssl の ドキュメント を読んでください。
警告: SSL/TLS を使用するときは、実装によっては いまだに 脆弱性が存在することを理解してください。SSL/TLS における脆弱性については http://disablessl3.com/https://weakdh.org/sysadmin.html を参照。
ヒント: Mozilla は Apache の設定ガイドラインが書かれている SSL/TLS の記事 と、セキュアな設定を作成するのに役立つ 自動化ツール を提供しています。

httpd.service を再起動して変更を適用してください。

バーチャルホスト

ノート: バーチャルホストの SSL サポートのために別に <VirtualHost dommainame:443> セクションを追加する必要があります。#多数のバーチャルホストの管理 のサンプルファイルを見て下さい。

複数のホストを使いたい場合は、/etc/httpd/conf/httpd.conf の次の行をアンコメントしてください:

Include conf/extra/httpd-vhosts.conf

/etc/httpd/conf/extra/httpd-vhosts.conf でバーチャルホストを設定します。デフォルトのファイルには初めて設定するときに役立つ詳細な説明の入ったサンプルが含まれています。

ローカルマシンでバーチャルホストをテストするには、バーチャルネームを /etc/hosts ファイルに追加します:

127.0.0.1 domainname1.dom 
127.0.0.1 domainname2.dom

httpd.service を再起動して変更を適用してください。

多数のバーチャルホストの管理

莫大なバーチャルホストを使う場合、簡単に有効化・無効化できるようにすると便利です。バーチャルホストごとに設定ファイルを作成してそれら全てを一つのフォルダに保存するのが推奨されています、例: /etc/httpd/conf/vhosts

まずフォルダを作成:

# mkdir /etc/httpd/conf/vhosts

次にフォルダに個々の設定ファイルを配置:

# nano /etc/httpd/conf/vhosts/domainname1.dom
# nano /etc/httpd/conf/vhosts/domainname2.dom
...

最後に、/etc/httpd/conf/httpd.conf で設定を Include:

#Enabled Vhosts:
Include conf/vhosts/domainname1.dom
Include conf/vhosts/domainname2.dom

行をコメント・アンコメントすることでバーチャルホストを有効化・無効化することができます。

基本的な vhost ファイルは以下のようになります:

/etc/httpd/conf/vhosts/domainname1.dom
<VirtualHost domainname1.dom:80>
    ServerAdmin webmaster@domainname1.dom
    DocumentRoot "/home/user/http/domainname1.dom"
    ServerName domainname1.dom
    ServerAlias domainname1.dom
    ErrorLog "/var/log/httpd/domainname1.dom-error_log"
    CustomLog "/var/log/httpd/domainname1.dom-access_log" common

    <Directory "/home/user/http/domainname1.dom">
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost domainname1.dom:443>
    ServerAdmin webmaster@domainname1.dom
    DocumentRoot "/home/user/http/domainname1.dom"
    ServerName domainname1.dom:443
    ServerAlias domainname1.dom:443
    ErrorLog "/var/log/httpd/domainname1.dom-error_log"
    CustomLog "/var/log/httpd/domainname1.dom-access_log" common

    <Directory "/home/user/http/domainname1.dom">
        Require all granted
    </Directory>
    
    SSLEngine on
    SSLCertificateFile "/etc/httpd/conf/server.crt"
    SSLCertificateKeyFile "/etc/httpd/conf/server.key"
</VirtualHost>

拡張

PHP

PHP をインストールするには、公式リポジトリから phpphp-apacheインストールしてください。

/etc/httpd/conf/httpd.conf の以下の行をコメントアウトしてください:

#LoadModule mpm_event_module modules/mod_mpm_event.so

そして次の行をアンコメントしてください:

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
ノート: php-apache に含まれている libphp7.somod_mpm_event で機能せず、mod_mpm_prefork でしか動作しないために上記の設定が必要になっています (FS#39218)。設定しないと以下のエラーが表示されます:
Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.  You need to recompile PHP.
AH00013: Pre-configuration failed
httpd.service: control process exited, code=exited status=1
他の方法として、mod_proxy_fcgi を使うこともできます (下の #php-fpm と mod_proxy_fcgi を使う を参照)。

PHP を有効にするには、以下の行を /etc/httpd/conf/httpd.conf に追加してください:

  • 次の行を LoadModule リストの LoadModule dir_module modules/mod_dir.so の後のどこかに記述:
LoadModule php7_module modules/libphp7.so
AddHandler php7-script php
  • 次の行を Include リストの最後に記述:
Include conf/extra/php7_module.conf

systemd を使って httpd.service を再起動して下さい。

PHP が正しく設定されたかどうかテストするには: Apache の DocumentRoot ディレクトリ (例: /srv/http/ または ~/public_html) に以下の内容で test.php という名前のファイルを作成します:

<?php phpinfo(); ?>

動作するか確かめるために次のページを見て下さい: http://localhost/test.php or http://localhost/~myname/test.php

高度な設定や拡張については、PHP を読んで下さい。

php-fpm と mod_proxy_fcgi を使う

ノート: Unlike the widespread setup with ProxyPass, the proxy configuration with SetHandler respects other Apache directives like DirectoryIndex. This ensures a better compatibility with software designed for libphp7, mod_fastcgi and mod_fcgid. If you still want to try ProxyPass, experiment with a line like this:
ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php-fpm/php-fpm.sock|fcgi://localhost/srv/http/$1

php-fpm をインストールしてください。

以下の内容で /etc/httpd/conf/extra/php-fpm.conf を作成:

/etc/httpd/conf/extra/php-fpm.conf
<FilesMatch \.php$>
    SetHandler "proxy:unix:/run/php-fpm/php-fpm.sock|fcgi://localhost/"
</FilesMatch>
<Proxy "fcgi://localhost/" enablereuse=on max=10>
</Proxy>
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

/etc/httpd/conf/httpd.conf の最後に作成したファイルを追加してください:

Include conf/extra/php-fpm.conf
ノート: sockfcgi の間のパイプを空白で囲むことはできません。localhost はどんな文字列でも置き換えられますが SetHandlerProxy ディレクティブに一致させる必要があります。詳しくは [1] を参照。SetHandlerProxy はバーチャルホストごとの設定で使うことができますが、fcgi:// の後ろの名前はバーチャルホストごとに変える必要があります。

PHP-FPM の設定は /etc/php/php-fpm.d/www.conf で行えます。特に変えなくても問題なく動作するはずです。

ノート:

httpd.conf に以下の行を追加している場合、すでに必要ないので削除してかまいません:

LoadModule php7_module modules/libphp7.so
Include conf/extra/php7_module.conf

httpd.servicephp-fpm.service再起動してください。

apache2-mpm-worker と mod_fcgid を使う

mod_fcgidphp-cgi パッケージをインストールしてください。

必要なディレクトリと PHP ラッパーのシンボリックリンクを作成:

# mkdir /srv/http/fcgid-bin
# ln -s /usr/bin/php-cgi /srv/http/fcgid-bin/php-fcgid-wrapper

/etc/conf.d/apache の以下の行をアンコメント:

HTTPD=/usr/bin/httpd.worker

以下の内容で /etc/httpd/conf/extra/php-fcgid.conf を作成:

/etc/httpd/conf/extra/php-fcgid.conf
# Required modules: fcgid_module

<IfModule fcgid_module>
    AddHandler php-fcgid .php
    AddType application/x-httpd-php .php
    Action php-fcgid /fcgid-bin/php-fcgid-wrapper
    ScriptAlias /fcgid-bin/ /srv/http/fcgid-bin/
    SocketPath /var/run/httpd/fcgidsock
    SharememPath /var/run/httpd/fcgid_shm
        # If you don't allow bigger requests many applications may fail (such as WordPress login)
        FcgidMaxRequestLen 536870912
        # Path to php.ini – defaults to /etc/phpX/cgi
        DefaultInitEnv PHPRC=/etc/php/
        # Number of PHP childs that will be launched. Leave undefined to let PHP decide.
        #DefaultInitEnv PHP_FCGI_CHILDREN 3
        # Maximum requests before a process is stopped and a new one is launched
        #DefaultInitEnv PHP_FCGI_MAX_REQUESTS 5000
        <Location /fcgid-bin/>
        SetHandler fcgid-script
        Options +ExecCGI
    </Location>
</IfModule>

/etc/httpd/conf/httpd.conf を編集して actions モジュールを有効化:

LoadModule actions_module modules/mod_actions.so

そして以下の行を追加:

LoadModule fcgid_module modules/mod_fcgid.so
Include conf/extra/httpd-mpm.conf
Include conf/extra/php-fcgid.conf
ノート:

httpd.conf に以下の行を追加している場合、もはや必要ないので削除してかまいません:

LoadModule php7_module modules/libphp7.so
Include conf/extra/php7_module.conf

httpd.service再起動してください。

MySQL/MariaDB

MariaDB で説明されているように MySQL/MariaDB を設定してください。

/etc/php/php.ini の以下の行の 少なくともどちらか一行 をアンコメント:

extension=pdo_mysql.so
extension=mysqli.so
警告: PHP 5.5 から、mysql.so非推奨 になり、ログにエラーが出力されるようになっています。

ウェブスクリプトのために権限を抑えた MySQL ユーザーを追加できます。また、/etc/mysql/my.cnf を編集して skip-networking 行をアンコメントすることで MySQL サーバーがローカルホストからしかアクセスできないようにすることも可能です。変更を適用するには MySQL を再起動する必要があります。

systemd を使って httpd.service を再起動します。

ヒント: データベースを利用するために phpMyAdmin, Adminer, mysql-workbench などのツールをインストールしても良いでしょう。

HTTP2

HTTP/2 のサポートを有効にするには、nghttp2 パッケージをインストールして httpd.conf の以下の行をアンコメント:

LoadModule http2_module modules/mod_http2.so

そして以下の行を追加:

Protocols h2 http/1.1

詳しくは mod_http2 のドキュメントを参照してください。

トラブルシューティング

Apache の状態とログ

Apache デーモンの状態を表示: systemctl status httpd

Apache のログがある場所は: /var/log/httpd/

Error: PID file /run/httpd/httpd.pid not readable (yet?) after start

unique_id_module をコメントアウトしてください: #LoadModule unique_id_module modules/mod_unique_id.so

Apache を 2.2 から 2.4 にアップグレード

php-apache を使っている場合、PHP の最初のノートを見て下さい。

Access Control は変更されました。Order, Allow, Deny, Satisfy ディレクティブは全て新しい Require シンタックスに変換してください。mod_access_compat を使うことで移行期間の古いフォーマットを使用することができます。

詳細: Upgrading to 2.4 from 2.2

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe

php7_module をロードする際に httpd.service が失敗して、journal で以下のようなエラーが表示される場合:

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.  You need to recompile PHP.

mpm_event_modulempm_prefork_module で置き換える必要があります:

/etc/httpd/conf/httpd.conf
LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

そして httpd.service を再起動してください。

AH00534: httpd: Configuration error: No MPM loaded.

アップグレードによってこのエラーが発生することがあります。httpd.conf の変化に対応してないのが原因です。修正するには、以下の行をアンコメントしてください:

/etc/httpd/conf/httpd.conf
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

また、他にもエラーが発生する場合は上記のセクションも参照。

AH00072: make_sock: could not bind to address

原因は複数考えられます。最も一般的な原因は既に別の何かがポートを listen している場合です。netstat で確認してください:

# netstat -lnp | grep -e :80 -e :443

何か出力された場合、ポートを占有しているサービスを停止してみてください。

何らかの理由で Apache が root で起動していない可能性もあります。手動で起動してみて AH0072 エラーが発生しないか確認してください。

# /usr/bin/httpd -k start

あとは設定に問題があるためにポートに何度も listen しようとしている可能性があります。悪い設定の例:

Listen 0.0.0.0:80
Listen [::]:80

php.ini の max_execution_time を変更しても反映されない

php.inimax_execution_time を 30 (秒) 以上の値に設定しても、30秒後に Apache から 503 Service Unavailable が返ってくることがあります。この問題を解決するには、http 設定の <FilesMatch \.php$> ブロックの直前に ProxyTimeout ディレクティブを追加してください:

/etc/httpd/conf/httpd.conf
ProxyTimeout 300

そして httpd.service を再起動してください。

参照