速さの理由を知る。安全の仕組みを知る。WordPress運用の「なぜ?」を解く技術コラム。

KUSANAGIの設定ファイルのカスタマイズ (Apache HTTP Server編)

石川英典
LinuxApacheKUSANAGIOSS

GMOプライム・ストラテジー「KUSANAGI」開発チームの石川です。

KUSANAGIでは、ほとんどの設定をKUSANAGIコマンドを使用して行うように設計されています。そのため、KUSANAGIコマンドを使用して環境の構築を行っていれば設定ファイルを直接編集することはほぼありませんが、様々な事情で設定をカスタマイズしたい場合があると思います。

前回の KUSANAGIの設定ファイルのカスタマイズ (Nginx編) に続いて、今回は「設定ファイルのカスタマイズ (Apache HTTP Server編)」Apache HTTP Serverの設定ファイルをカスタマイズする方法を解説します。

設定ファイルのパス

KUSANAGIでは複数のミドルウェアを使用しています。しかし、標準のAlmaLinux OSのRPMではなく、KUSANAGI開発元のGMOプライム・ストラテジーが提供しているRPMパッケージがあります。Apache HTTP Serverもそのようなパッケージの1つです。

GMOプライム・ストラテジーで提供しているパッケージでは、AlmaLinux OSのRPMパッケージと競合 (conflict) しないように、標準とは異なるパスにインストールしています。そのため、設定ファイルのパスが標準とは異なっています。

KUSANAGIではApache HTTP Serverの設定ファイルは /etc/opt/kusanagi/httpd 以下にあります。これをApache HTTP Serverの設定ファイルのディレクトリと呼びます。
プロファイルごとの設定ファイルも /etc/opt/kusanagi/httpd/conf.d 以下にあります。これをプロファイルごとの設定ファイルのディレクトリと呼びます。
また、利用するモジュールをロードする LoadModule を定義した設定ファイルは /etc/opt/kusanagi/httpd/conf.modules.d 以下にあります。

なお、KUSANAGI Security EditionではKUSANAGI Free Edition, Business Edition, Premium Editionとはパスが異なります。KUSANAGI Security Editionではミドルウェアの複数のバージョンを組み合わせて運用できるようするために、バージョンごとにパスを変えているためです。KUSANAGI Security Editionにおけるパスについては「ミドルウェアの設定ファイル・ログファイルのパス」を合わせて参照してください。

KUSANAGIのApache HTTP Serverのモジュール構成

KUSANAGIではパフォーマンスを重視して以下のモジュールを利用しています。

  • mpm_event_module
  • cgid_module
  • proxy_fcgi_module

MPMにはeventを利用します。prefork および worker は動作しますが、サポート対象外です。
PHPはproxy_fcgiを利用して、php-fpmで実行します。mod_phpは利用できません。

デフォルトで読み込まれるモジュールについては以下のコマンドで確認できます。

# /opt/kusanagi/sbin/httpd -M

Security Editionの場合
# /opt/kusanagi/httpd24/sbin/httpd -M

利用できる全てのモジュールは以下に配置されています。

/opt/kusanagi/lib64/httpd/modules

Security Editionの場合
/opt/kusanagi/httpd24/lib64/httpd/modules

Apache HTTP Serverのバージョン、および、KUSANAGIでリンクしているライブラリとそのバージョンの違いから、AlmaLinux OSやEPEL等の他のRPMで配布されているモジュールを利用することはできません。

KUSANAGIの設定ファイルの構成

httpd.conf

一般的にApache HTTP Serverでは httpd.conf に設定を記載します。 httpd.conf はApache HTTP Serverの設定ファイルのディレクトリにあります。KUSANAGIにも httpd.conf はありますが、KUSANAGIコマンドで設定を行えるように、直接 httpd.conf を編集しないように設計されています。

Apache HTTP Serverでは他の設定ファイルを読み込む IncludeIncludeOptional というディレクティブがあります。KUSANAGIはこのディレクティブを活用して、編集しない httpd.conf から編集できる 他の設定ファイル を読み込むようにしています。

ファイル名抜粋備考
httpd.confInclude conf.modules.d/*.confconf.modules.d/*.conf を読み込む
IncludeOptional conf.d/*.confconf.d/*.conf があれば読み込む

これにより conf.modules.d (LoadModuleの設定ファイルのディレクトリ) の *.conf と conf.d (プロファイルごとの設定ファイルのディレクトリ) の *.conf を読み込まれます。この仕組みを利用して、後述するプロファイルの設定ファイルや、いくつかのデフォルトの設定を記述した設定ファイルを読み込んでいます。

プロファイルの設定ファイル

プロファイルの設定ファイルは、プロファイルごとの設定ファイルのディレクトリである /etc/opt/kusanagi/httpd/conf.d 以下にあります。仮にプロファイル名が PROFILE とします。また、プロファイルの種類によって Include する設定ファイルが異なります。

これらファイルはプロファイルをプロビジョンした際に自動的に生成されます

ファイル名説明
conf.d/PROFILE.confプロファイルの設定ファイル。http/httpsの VirtualHost を定義
ファイル名抜粋備考
conf.d/PROFILE.confInclude conf.d/wp.incWordPressのための定義
Include conf.d/wp.incDrupalのための定義
Include conf.d/lamp.incLAMPのための定義
Include conf.d/fcgi.incFCGIのための定義
Include conf.d/mt.incMovable Typeのための定義
Include conf.d/ssl.incSSLのための定義
IncludeOptional modsecurity.d/kusanagi_activated_rules/wordpress/*.confWAF (mod_security) のための定義 (WordPress)
IncludeOptional modsecurity.d/kusanagi_activated_rules/general/*.confWAF (mod_security) のための定義 (WordPress以外)

カスタマイズできない設定ファイル

httpd.conf 、および、プロファイルの設定ファイルから読み込まれる設定ファイルには、RPMパッケージの更新によって上書きされるものがあります。そのため、これらの設定ファイルはカスタマイズできません。

以下はその一例です。なお、デフォルトで使用されないファイルは除いています。(全て /etc/opt/kusanagi/httpd からの相対パスです)

ファイル名備考
magic
mime.types
httpd-production.confKUSANAGI Security Editionのみ
httpd-staging.confKUSANAGI Security Editionのみ
httpd-with_nginx.confKUSANAGI Free Edition, Business Edition, Premium Editionのみ
httpd.conf
conf.d/autoindex.conf
conf.d/drupal.inc
conf.d/fcgi.inc
conf.d/lamp.inc
conf.d/mt.inc
conf.d/php.conf
conf.d/security.conf
conf.d/ssl.conf
conf.d/ssl.inc
conf.d/userdir.conf
conf.d/wp.inc
conf.modules.d/00-base.conf
conf.modules.d/00-brotli.conf
conf.modules.d/00-dav.conf
conf.modules.d/00-headers.conf
conf.modules.d/00-http2.conf
conf.modules.d/00-mpm.conf
conf.modules.d/00-proxy.conf
conf.modules.d/00-ssl.conf
conf.modules.d/01-cgi.conf

カスタマイズできる設定ファイル

プロファイルごとの設定ファイルのディレクトリである /etc/opt/kusanagi/httpd/conf.d 以下にあるプロファイルの設定ファイル (PROFILE.conf) はカスタマイズが可能です。

任意の DirectoryFiles を追加したり、既存の Directory に任意のディレクティブを追加することができます。なお、既存の Directory を変更したり、削除することもできますが、KUSANAGIコマンドの中には特定の Directory の存在を条件にしているものがあるため、十分に注意して行ってください。また、同様の理由から IncludeIncludeOptional を削除したり変更することはおすすめしません。

カスタマイズの指針

KUSANAGIの設定ファイルの構成と、カスタマイズできる設定ファイル・できない設定ファイルから、具体的にどのようにカスタマイズを行えばよいかを説明します。

利用するモジュールを追加する場合

KUSANAGIではデフォルトで有効にしていないモジュールを利用したい場合は、 /etc/opt/kusanagi/httpd/conf.modules.d 以下に既存のファイル名と被らない設定ファイルを作成し、 httpd.confInclude により自動的に読み込ませる方法を推奨します。

利用できるモジュールについては KUSANAGIのApache HTTP Serverのモジュール構成 を参照してください。

kusanagiコマンドで行える場合

kusanagiコマンドで行えるカスタマイスは、kusanagiコマンドを使用してください。以下が該当します。

目的kusanagiコマンド
FQDNを変更するkusanagi configureコマンド
SSL証明書を更新・変更するkusanagi sslコマンド
WAF (mod_security) を有効・無効にするkusanagi wafコマンド

KUSANAGIは様々な Webサーバ構成 をサポートしています。ユーザーが望んだときにいつでも切り替えが行えるように、Apache HTTP ServerとNginxの設定内容を同期するようにしています。そのため、手動でApache HTTP Serverの設定ファイルのみを変更すると、Nginxに切り替えた際に設定が正常に反映できない場合があります。

KUSANAGI (VM) 全体に設定する場合

特定のサイト (プロファイル) ごとではなく、KUSANAGIのVM全体で有効にしたい設定がある場合には、 /etc/opt/kusanagi/httpd/conf.d 以下にプロファイル名と被らない設定ファイルを作成し、 httpd.confIncludeOptional により自動的に読み込ませる方法を推奨します。

例えば、ドメイン名 (FQDN) に一致しなかった場合に404応答するデフォルトサーバを定義したい1場合には、以下のような内容で conf.d/default_server.conf を作成します。

<VirtualHost _default_:80>
    Redirect 404 /
</VirtualHost>

<VirtualHost _default_:443>
    Redirect 404 /
    Include conf.d/ssl.inc
    SSLCertificateFile /etc/pki/tls/certs/localhost.crt
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
    SSLOpenSSLConfCmd DHParameters "/etc/opt/kusanagi/ssl/dhparam.key"
</VirtualHost>

Apache HTTP Serverに詳しい方向けに説明すると、 httpd.confIncludeOptionalserver config コンテキスト内で記述されているので、 server config コンテキストで記述できるディレクティブを定義ができます ( VirtualHostserver config コンテキスト内に記述できるディレクティブです) 。

他には既に httpd.conf で定義されているディレクティブを変更することもできます。Apache HTTP Serverでは同一のディレクティブを定義した場合には後勝ちとなるため、IncludeOptional で指定したファイルの内容で上書きすることができます。

MaxKeepAliveRequests 500

<IfModule mpm_event_module>
    StartServers              3
    MinSpareThreads          25
    MaxSpareThreads          75
    ThreadsPerChild          25
    ServerLimit              16
    MaxRequestWorkers       400
    MaxConnectionsPerChild 2000
</IfModule>

プロファイルごとに設定する場合

特定のサイト (プロファイル) ごとに有効にしたい設定がある場合には、 /etc/opt/kusanagi/httpd/conf.d 以下にあるプロファイルの設定ファイル (PROFILE.conf) をカスタマイズする方法を推奨します。

PROFILE.confをカスタマイズする

HTTP/HTTPSで異なる内容をカスタマイズする場合には、 conf.d/PROFILE.conf をカスタマイズします。この設定ファイルは以下のような形式になっています。

例えば HTTP で特定のリダイレクトを行いたい場合などには、上のブロックに記述します。

<VirtualHost *:80>
    # HTTPに関する内容
</VirtualHost>

<VirtualHost *:443>
    # HTTPSに関する内容
</VirtualHost>

Apache HTTP Serverに詳しい方向けに説明すると、 それぞれ virtual host コンテキストで記述できるディレクティブを定義ができます。

なお、HTTP/HTTPSで共通の内容をカスタマイズする場合には、 HTTP/HTTPSの両方のブロックに記述します。HTTPSでのみ運用しているサイトであっても、ロードバランサー経由などでHTTPでアクセスを受ける場合があります。サイトに関する設定は共通の内容に記述することをおすすめします。

カスタマイズできない設定ファイルを変更する場合

どうしてもRPMパッケージが提供しているカスタマイズできない設定ファイルを変更する場合は、次の点に気を付けてください。

  • 変更が巻き戻る可能性があることを認識して、変更したファイルもバックアップしておく。
  • dnf upgrade等でアップデートを行った後は設定ファイルを確認し、必要に応じて変更を再度反映する。

カスタマイズの確認と反映

設定ファイルのテスト

設定ファイルに加えた変更をテストするには以下のコマンドを使用します。

# kusanagi httpd --test

設定ファイルの反映

設定ファイルに加えた変更を反映するには以下のコマンドを使用します。なお、--reloadを指定した場合には同時にテストも行います。この際にテストがエラーとなった場合にはリロードは行いません。

# kusanagi httpd --reload

KUSANAGI Security Editionでの注意事項

KUSANAGI Security EditionではWebサーバ構成によって参照する設定ファイルが変わります。

プロファイルごとの設定ファイルのディレクトリである /etc/opt/kusanagi/httpd/conf.d 以下のファイルを雛形として、それぞれのWebサーバ構成に合わせて設定ファイルを生成します。そのため、常にカスタマイズは /etc/opt/kusanagi/httpd/conf.d 以下のファイル に行ってください。また、変更を反映するには各 kusanagi コマンドに --test/--reload をつけて実行してください。

参考

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解