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

スポンサーリンク

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

点数

89点

感想

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

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

基本

モジュール

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

  • 静的モジュール コンパイル時に本体のバイナリに組み込む。
  • DSO(Dynamic Shared Object)モジュール 動的に組み込む。

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の起動や停止が可能である。

  • apachectl
    apachectl configtest/stat/stop/restart/status/graceful
  • systemctl
    systemctl start/stop/restart/status httpd
    ※ Apacheをサービスとして有効化/無効化する: systemctl enable/disable httpd

設定

設定ファイルの場所

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の主なディレクティブ

  • ServerAdmin
    管理者のメアド。404画面などに表示される。
  • ServerName
    FQDN+ポート番号。
    なくても自動認識されるが、設定することが推奨されている。
  • AddDefaultCharset
    レスポンスヘッダに付加されるcharset。
    デフォルトはUTF-8がセットされている。
    これが設定されているとmetaタグで文字コードを指定しても無視される。
    複数の文字コードのHTMLファイルが混在する場合はコメントアウトする。

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

MPMの設定

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

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

  • prefork MPM
    マルチプロセス型。
    あらかじめ複数のプロセスを立ち上げておく。
  • worker MPM
    マルチスレッド型。
    プロセスは1つで、リクエスト毎にスレッドを割り当てる。
    設定したスレッド数を超えると新たなプロセスを立ち上げる。
  • event MPM
    Apache2.4から追加された。
    worker MPMの一種で、KeepAlive時の処理を別のスレッドに割り振る。

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 "var/www/html">
    ここにディレクティブを記述
    </Directory>
  • ファイルを指定
    <Files "sercret.html">
    ここにディレクティブを記述
    </Files>
  • URLのパスを指定
    LocationとAliasを組み合わせて使用する。
    <Location URLのパス>
    ここにディレクティブを記述
    </Location>
    Alias URLのパス 実際のパス

    例)
    <Location /dav /var/www/dav>
    Dav on
    </Location>
    Alias /dav /var/www/dav

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

正規表現による指定

  • <Directory>
  • <File>
  • <Location>
  • <Alias>

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

  • <DirectoryMatch>
  • <FileMatch>
  • <LocationMatch>
  • <AliasMatch>

記述例

<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だけで問題ないと思う。

  • All
    全て有効
  • None
    全て無効
  • ExcecCGI
    mod_cgiモジュールによるCGI実行を許可。
  • FollowSymLinks
    シンボリックリンクをたどることを許可。
  • Includes
    mod_includeモジュールによるSSIを許可。
  • Indexes
    ディレクトリインデックスの表示を許可(mod_autoindexモジュールが必要)

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

デフォルトの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>

  • All
    全て許可
  • None
    全て無効
  • AuthConfig
    ユーザー認証に関するディレクティブを許可。
  • Limit
    アクセス制御に関するディレクティブを許可。
  • Options
    Optionsディレクティブを許可。

コメント