以前紹介したNATインスタンス構築の記事「CloutInitでNATインスタンス(iptables)を構築」に続き、
Webサーバ(Apache)の構築も試してみました。

初期構築スクリプトは下記となります。

#!/bin/sh
set -e
trap 'echo "NG: $?"' ERR
yum -y install httpd mod_extract_forwarded
if [ ! -L /etc/httpd/conf/httpd.conf ]; then
mv /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
ln -s /opt/suz-lab/etc/apache/httpd.conf /etc/httpd/conf/httpd.conf
fi
if [ ! -f /etc/httpd/conf/virtual_host.conf ]; then
cat /etc/httpd/conf/virtual_host.conf
NameVirtualHost *:80

# DocumentRoot /var/www/html
# ServerName www.example.com

EOT
fi
service httpd restart
chkconfig httpd on
exit 0

このスクリプトを使用し、下記のようにEC2を起動します。

#include-once
https://raw.github.com/suz-lab/suz-lab-centos-ami/master/share/cloud-init/suz-lab_apache

サーバにログインすると、下記のようにApacheがインストールされ、設定ファイルも
調整されていることがわかります。

# pwd
/etc/httpd/conf
# ls -1
httpd.conf -> /opt/suz-lab/etc/apache/httpd.conf
httpd.conf.org
magic
virtual_host.conf

設定ファイル(httpd.conf)は、次のようにしています。

suz-lab-centos-ami:httpd.conf

Listen          80
DocumentRoot "/var/www/html"
DirectoryIndex index.html
CustomLog logs/access_log combined
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined

Timeout 60
KeepAlive on
MaxKeepAliveRequests 0
KeepAliveTimeout 120


StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000



StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0


LoadModule log_config_module modules/mod_log_config.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule mime_module modules/mod_mime.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule dir_module modules/mod_dir.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule headers_module modules/mod_headers.so
LoadModule extract_forwarded_module modules/mod_extract_forwarded.so

TypesConfig /etc/mime.types
ServerRoot "/etc/httpd"
MIMEMagicFile conf/magic
PidFile run/httpd.pid
User apache
Group apache
ServerTokens ProductOnly
TraceEnable off
FileETag None
LogLevel warn
ErrorLog syslog
MEForder refuse,accept
MEFrefuse all
MEFaccept all
SetEnvIf X-Forwarded-Proto https HTTPS=on
SetEnvIf X-Forwarded-For ".+" forwarded
RewriteEngine on
RewriteRule ^(.*) - [E=CLIENT_ADDR:%{REMOTE_ADDR},L]
RequestHeader set X-Forwarded-For "%{CLIENT_ADDR}e" env=!forwarded


Options FollowSymLinks
AllowOverride None


Include conf/virtual_host.conf

上記設定ファイルは、基本的なセキュリティやELBの利用等を考慮し、最小限のものとしたつもりですが、
改めて精査しておこうと思います。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら