サイトアイコン 上尾市のWEBプログラマーによるブログ

「初めてのWebサーバ「Apache」CentOS 7編」の感想・備忘録1

書籍「初めてのWebサーバ「Apache」CentOS 7編」のまとめ。

点数

89点

感想

説明がわかりやすく、とても勉強になった。

MPMの設定、Optionsディレクティブ, AllowOverrideディレクティブ、などApacheの設定を行う際に必要な情報は一通り記述されていた。

基本

モジュール

2種類あるが、CentOSを含めたほとんどのディストリビューションが動的モジュールとしてモジュールを用意している。

CentOSではDSOモジュールは/use/lib64/httpd/modulesに置かれている。
(/etc/httpd/modulesには/use/lib64/httpd/modulesへのシンボリックリンクがある)

有効なモジュールの確認

httpd -Mまたはapachectl -M
静的モジュールは(static)、動的モジュールは(shared)として表示される。

起動コマンド

Apache本体は/usr/sbin/httpdである。
制御用にapachectlコマンドが用意されている。
CentOS 7ではサービス管理のためのsystemctlコマンドが用意されているので、どちらでもApacheの起動や停止が可能である。

設定

設定ファイルの場所

CentOSでは、設定ファイルが/etc/httpdディレクトリにまとめて保存されている。メインの設定ファイルは/etc/httpd/conf/httpd.confである。

すべての設定をhttpd.conf内に記述すると煩雑になるので、機能やモジュール毎の設定ファイル(拡張子は.conf)が/etc/httpd/conf.d/, /etc/httpd/conf.modules.d/に用意されていて、httpd.confでそれらのファイルを読み込んでいる。
IncludeOptional conf.d/*.conf
Include conf.modules.d/*.conf
※ IncludeOptionalディレクティブはワイルドカードに一致するファイルが見つからなかった場合にエラーにならないのに対して、Includeディレクティブはエラーになる。

たとえば、/etc/httpd/conf.modules.d/00-base.confでは、複数のLoadModuleディレクティブにより基本的なモジュールをまとめて読み込んでいる。
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so

…以下、60個くらいのモジュール読み込みが続く。

httpd.confの主なディレクティブ

ディレクティブの後ろ(行末)にコメントを記述することはできないので注意。
AddDefaultCharset: UTF-8 #hoge
は起動時にエラーとなる。

MPMの設定

Apache2.xからはサーバプロセスの動作モードもMPM(Multi Processing Module)としてモジュール化された。

3種類のMPMから選択可能となっている。
(httpd -M|grep mpmで現在の設定を確認可能)

event MPMが最も効率が良いが、デフォルトではprefork MPMになっている

MPMの設定は/etc/httpd/conf.modules.d/00-mpm.confにある。
event MPMを有効にする場合は、
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
をコメントアウトして
LoadModule mpm_event_module modules/mod_mpm_event.so
のコメントアウトを外す。
event MPMでPHPを使う場合、PHPがスレッドセーフである必要があり、通常はphp-fpmを使う。

ディレクティブ

セクションディレクティブ

<Directory<, <Files>, <Location>はワイルドカードを使うことができる。
<Files ".ht*">
ここにディレクティブを記述
</Files>

正規表現による指定

の代わりに以下のセクションディレクティブを使うことで、正規表現を使った指定が可能となる。

記述例

<FilesMatch "\.(gif|jpg|png)$">
ここにディレクティブを記述
</FilesMatch>

<FilesMatch "^\.ht">
ここにディレクティブを記述
</Files>

モジュールがロードされていた場合の指定

動的モジュールのロードはLoadModuleディレクティブで行われる。
LoadModule 識別子 パス
例) LoadModule dav_module modules/mod_dav.so

IfModuleセクションディレクティブで、モジュールがロードされていた場合に実行するディレクティブを指定することができる。
モジュール名はコンパイル前のファイル名で指定するため、拡張子は.soではなく.cである。

記述例

<IfModule mod_user_dir.c>
ここにディレクティブを記述
</IfModule>

Optionsディレクティブ

CGI、シンボリックリンク、SSI、ディレクトリインデックス、の有効無効を設定する。
Optionsディレクティブを記述しないとALLが指定されているとみなされる。
通常はOptions FollowSymLinksだけで問題ないと思う。

※複数指定はスペース区切り

デフォルトのhttpd.confではIndexes FollowSymLinksが指定されているのでOptions FollowSymLinksに変更するべき。

<Directory"/var/www/html">
〜省略〜
Options Indexes FollowSymLinks
〜省略〜
</Directory>

サブディレクトリで親ディレクトリのOptionsを上書きする

全てのオプションを記述する、または「+」「-」を使って追加・削除したいオプションを記述する。

例) Options +Indexes -FollowSymLinks

「+」「-」付きの指定と、そうでない指定を混在させることはできないので注意。
Options Indexes -FollowSymLinksはエラー

AllowOverrideディレクティブ

.htaccessを許可する。

デフォルトのhttpd.confでは許可されていない。
<Directory"/var/www/html">
〜省略〜
AllowOverride None
〜省略〜
</Directory>

モバイルバージョンを終了