Apache 2.4 について書いてるので、2.2 だとちょっと違うかもしれない
Apache
Apache のバージョンを表示させない
httpd.conf
ServerSignature Off
ServerTokens Prod
- サーバーエラー時に Apache のバージョン表示消す
- HTTP ヘッダから Apache のバージョン消す
アクセスログの設定
httpd.conf
LogFormat "host:%{X-Forwarded-For}i\tident:%l\tuser:%u\ttime:%{%d/%b/%Y:%H:%M:%S %z}t\tmethod:%m\tpath:%U%q\tprotocol:%H\tstatus:%>s\tsize:%b\treferer:%{Referer}i\tagent:%{User-Agent}i\tresponse_time:%D" ltsv
SetEnvIf User-Agent "ELB-HealthChecker" nolog
SetEnvIf User-Agent "internal dummy connection" nolog
CustomLog "logs/access_log" ltsv env=!nolog
- ログフォーマットを LTSV にする
- IP アドレスを ELB の IP アドレスではなく X-Forwarded-For を見るようにする
- ELB のヘルスチェックをログに書き出さない
- ELB の internal dummy connection をログに書き出さない
- mackerel で外形監視をしている場合は以下の行も追加する
SetEnvIf User-Agent "mackerel-http-checker" nolog
ELB のときの http → https リダイレクト設定
httpd.conf
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Port} !^443$
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
RewriteCond %{HTTP:X-FORWARDED-FOR} !^$
RewriteRule ^(.*)?$ https://%{HTTP_HOST}$1 [R=301,L]
- ELB のヘルスチェックはリダイレクトしない
- ELB 以外 (VPC 内部) からのアクセスはリダイレクトしない
SSL に関する設定はアプリケーション側にあまり意識してほしくないので .htaccess
に書くよりも httpd.conf
に書いたほうが良いと思う
ELB
アイドルタイムアウトを 20 秒に設定する
Apache 2.4 を使っているとアクセスログに 408 エラーが大量に出るので、ELB の設定でアイドルタイムアウトを 60 秒から 20 秒に変更する
参考: ELB-httpd間で408エラー多発 - 駆け出しアクアテラリストのIT奮闘記
オマケ: PHP
X-POWERED-BY
ヘッダで PHP のバージョンを送るのをやめる
php.ini
expose_php = Off