Apache2.2から2.4に更新した際に行った事

先日、このWebサーバーのPHPを5.3から5.6にアップデートした際に、必要に迫られApacheを2.2から2.4に更新しました。

すると、設定やアクセス制御の記述方法が変わっていて、当初、上手く動作しませんでした。

今後また同様の問題に対応する機会があるやもしれません。行った対処を書き残しておく事にします。

アクセス制御に関する記述を変更

Apacheのエラーログに下記のようなログが出力されていました。

client denied by server configuration: /var/www/xmlrpc.php

以前、このサイトで利用しているWordpressのxmlrpc.phpに多数のアクセスを行い、負荷を掛けてDDoS攻撃の踏み台にしようとした輩が現れた事がありました。その際、xmlrpc.phpに対するアクセスを制御する為、.htaccessに下記のような記述を追加しました。

<Files ~ "xmlrpc.php$">
  Order Deny,Allow
  Deny from all
  # Automattic を許可
  Allow from 192.0.64.0/18
</Files>

このうち、Jetpack by WordPress.comプラグインを利用する為、Automatic社のIPアドレスだけ許可を行うようにしていました。

調べると、この記述方法は2.4では利用できなくなったとの事で、Automatic社がxmlrpc.phpにアクセスできずにログが出力されていたようです。

下記のように書き換えました。

<Files ~ "xmlrpc.php$">
  # Automattic を許可
  Require ip 192.0.64.0/18
</Files>

MPMを変更

Apacheのエラーログに下記のようなログが出力されていました。

The mpm module (prefork.c) is not supported by mod_http2. The mpm determines how things are processed in your server. HTTP/2 has more demands in this regard and the currently selected mpm will just not do. This is an advisory warning. Your server will continue to work, but the HTTP/2 protocol will be inactive.

2.2ではprefork MPMを用いていましたが、2.4ではprefork MPMが利用できなくなっていました(組み込めば利用できるようですが、ソースコードからコンパイルしないといけないような記述を目にしたのでこれは利用しない事にしました)。代わりにevent MPMがデフォルトで利用できるようになっているので、それを利用するよう設定を変更しました。

$ sudo touch /etc/httpd/conf.d/mpm.conf

mpm設定用ファイルを作成し、それに設定を記述しました。

<IfModule mpm_event_module>
    ThreadsPerChild 2
    MaxRequestWorkers 6
    MinSpareThreads 1
    MaxSpareThreads 3
    StartServers 1
    ThreadLimit 3
    MaxConnectionsPerChild 0
</IfModule>

このサイトはAmazon Web Services EC2のt2microで運営しています。非力なインスタンスなので、この設定を行わないとメモリを使い果たしてインスタンスがフリーズしてしまいます。その為、実行するスレッドやプロセス数を最低限度に留めています。

mod_sslをインストール

Apacheのエラーログに下記のようなログが出力されていました。

mod_ssl does not seem to be enabled

Apache2.4用のmod_sslがインストールされていない為、このログが出力されていたようです。

mod_sslをインストールしました。

$ sudo yum install mod24_ssl

Proxyを利用しない

Apahceのエラーログに下記のようなログが出力されていました。

No slotmem from mod_heartmonitor

調べたところ、これは/etc/httpd/conf.modules.d/00-proxy.confに記述されたモジュールがロードされた際に出力されるそうです。

このWebサイトではProxyを利用しないので、00-proxy.confファイルを00-proxy.conf.unusedとリネームし、モジュールをロードしないよう設定しました。

最後に

2.2から思ったよりも変更があったり、設定方法が変わっていて戸惑いました。

これから少しずつ2.4の機能を学んで、少しずつ最適化していきたいと思います。