🧚‍♀️

Apache2.4の忘れがちな設定まとめ

2022/08/28に公開

こんにちは深緑です。
先日、本番リリースがありました。
在宅勤務でのリリース作業だったのですが、夏休みということもあって別の部屋で兄弟喧嘩が発生してる中でのリリース作業でした。
しんどかったですね・・・。

今回は、Apache周りの忘れがちな設定を集めてみました。
稼働前後で設定漏れを見つけてしまうと焦るので気をつけたいところです。

.htaccessの有効化

最初の要件にはなくとも.htaccessを使いたいシチュエーションがあります。
取り急ぎmod_rewriteを有効化しておいて、後はAllowOverrideで制御するだけにしておくと助かります。
AllowOverride ディレクティブ

LoadModule rewrite_module modules/mod_rewrite.so

mod_rewriteを有効化する一文は、httpd.confにコメント状態で記載されている場合と、
記述自体がない場合はがあるようです。
なので、httpd.confをしっかり検索してから追記するようにしています。

バーチャルホストをよく使うので、要望が出たらそのホストだけAllowOverrideで有効化したりしてます。

<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/html/example/
ErrorLog /var/log/httpd/example_error.log
CustomLog /var/log/httpd/example_access.log combined
<Directory />
    AllowOverride All
    Require all granted
</Directory>

IP直打ちされた場合のためのデフォルトバーチャルホスト

バーチャルホストを複数使っている場合に、どのバーチャルホストにも該当しないリクエストを送ると、
Apacheは設定上の一番上のバーチャルホストを使ってレスポンスを返すことがあります。
これは、IPアドレス直打ちでアクセスした時によく見る現象です。
これだと見えてはいけないサイトが見えることがあるので、
必ず一番上にデフォルトのバーチャルホストを設けるようにしています。

HTTP TRACEメソッドの無効化

Apacheはデフォルトで「HTTP TRACEメソッド」という機能が有効になっています。
この機能が有効だと、HTTPヘッダに含まれている情報が盗まれるとかサイトにXSSの問題があると更にリスクが高まると言われています。
とりあえずこの機能を使ってるのを見たことがないので、使う時が来るまで無効化で良いと思います。

TraceEnable off

Apache 文字化け対策 AddDefaultCharset

AddDefaultCharsetは、レスポンスのコンテントタイプが text/plain あるいは text/html の場合に文字コードを指定するパラメータです。
AddDefaultCharset ディレクティブ

デフォルトはOFFのはずですが、ディストリビューションやバージョンによってはセットアップ時にデフォルト文字コードが入るようです。
2022年7月頃、Apamazon Linux2でyumでApacheインストールすると、
httpd.confに

AddDefaultCharset utf8

が入っていました。
全体がutf8なら特に問題ないのですが、sjisのファイルが混じっていたりすると変換が起きて文字化けになります。
そういう場合はoffにしてファイルの文字コードを活かすようにすると解決します。

AddDefaultCharset Off

まあ、ファイルの方の文字コードを変えてもらうのが本来だと思うのですが、色々事情はありますよね。

ApacheのTest Pageを非表示にする

IPアドレス直打ちでアクセしたり、不完全なバーチャルホストを表示すると、
ApacheのTest Pageが出ることがあります。
出てしまうとApacehを使ってることがバレバレですし見栄えも悪いので非表示にしておきます。
(ある程度構築が進むと見る機会がなくなるので意外と見落としてしまいます。)
/etc/httpd/conf.d/welcome.conf
の、下記部分をコメントにすると非表示にできます。

<LocationMatch "^/+$">
   Options -Indexes
    ErrorDocument 403 /error/noindex.html
</LocationMatch>

↓↓↓

#<LocationMatch "^/+$">
#   Options -Indexes
#    ErrorDocument 403 /error/noindex.html
#</LocationMatch>

[AWS限定]ALBのヘルスチェックをログに出さない

稼働後にApacheのログを追う場合にALBのヘルスチェックは本当に邪魔なので、
出さないようにしています。

SetEnvIf User-Agent "ELB-HealthChecker.*" nolog

[PHP]ログの空ファイルを作っておく

Apacheそのものではありませんが・・・
PHPのログの有効化を忘れて焦り、有効化してもログが出なくてまた焦りということがよくあります。
php.iniのログ部分がコメントになってたとしたら、有効化します。

error_log = /var/log/php/error.log

設定が効いてるかどうかはコマンドで確認します。

php -i | grep log

設定しても出ない時は、一回空ファイル作って所有者をApacheにすると大体解決しますね。

touch /var/log/php_errors.log
chown apache:apache /var/log/php_errors.log

まとめ

以上、Apacheの忘れがちな設定でした。
ところで、Apacheの設定ファイルですが私は/etc/httpd/conf.d/hoge.confのように差分ファイルを置くようにしてます。
差分で設定値の上書きができますので。
オリジナルのファイルを編集するのが嫌なんですよね。
PHPの設定ファイルも同じです。

なのですが、これまで一緒に仕事させていただいた現場だとみなさんhttpd.confを編集されてるんですよね・・・。
更にコメントを削って使ってる設定項目だけにしてしまうところもありました。
文化の違いですかね・・・。
生粋のインフラ屋さんはそういう感じなんですかね。
設定ファイルの扱いについてはよく周りと話をしてから運用方法を決めなけれなばりません。

Discussion