対象サーバについて
製品名 | OpenBlockS 600 |
OS(kernel ver) | Debian lenny(2.6.29) |
CPU | 600MHz(AMCC PowerPC 405EX) |
メモリ | 1GB(DDR2 SDRAM) |
ストレージ | 8GB(Compact Flash) |
apache2のインストール
www:~# aptitude install apache2
無事インストールされたので、確認を実施します。
www:/var/www# netstat -an 稼働中のインターネット接続 (サーバと確立) Proto 受信-Q 送信-Q 内部アドレス 外部アドレス 状態 tcp6 0 0 :::80 :::* LISTEN →80番ポートにてListenしている。 www:~# ps aux | grep apache root 27301 0.0 0.3 18392 3116 ? SNs 20:04 0:00 /usr/sbin/apache2 -k start www-data 27303 0.0 0.2 18156 2184 ? SN 20:04 0:00 /usr/sbin/apache2 -k start www-data 27304 0.0 0.3 239892 3680 ? SNl 20:04 0:00 /usr/sbin/apache2 -k start www-data 27307 0.0 0.3 239860 3604 ? SNl 20:04 0:00 /usr/sbin/apache2 -k start root 27363 0.0 0.0 3316 900 pts/0 SN+ 20:26 0:00 grep apache →プロセスが起動している www:~# telnet 127.0.0.1 80 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. GET / <html><body><h1>It works!</h1></body></html> Connection closed by foreign host. →正常に反応する
別途、windowsから「http://172.20.0.2」にアクセスして、「It works!」と表示されることを確認します。
コンフィグ設定
セキュリティ関係の設定
www:~# /etc/init.d/apache2 stop
とりあえずapacheを止め、必須のセキュリティ設定を実施していきます。
編集するファイル:/etc/apache2/conf.d/security
ServerTokens FullServerTokens ProdServerSignature OnServerSignature OffTraceEnable OnTraceEnable Off
上記の箇所のみ修正します。設定の意味は以下の通りです。
ServerTokens Prod | クライアントに送り返す Server応答ヘッダ内のサーバ情報を最低限にする。 |
ServerSignature Off | サーバが生成するドキュメントのフッタにサーバ情報を載せない。 |
TraceEnable Off | TRACEメソッドに応答しない。 |
ディレクトリ構成について
www.example.jpとwww.example2.jpのマルチドメイン構成を前提として説明します。マルチドメインは後述のバーチャルホスト機能を利用して実現します。
ツール類は例としてIPTable log analyzerの設定のみを記載します。
IP直打ちでのアクセス(http://WWW.XXX.YYY.ZZZ)はFQDN指定のアクセス(http://www.example.jp等)と比較して不正なものが多いため、IP指定でのアクセスに対する設定ファイルを用意し、全て拒否する設定を行います(後述)。またログについても、IP直打ちでのアクセスログをFQDN指定のアクセスログと別ファイルで保存していく方針とします。
URL | www.example.jp |
DocumentRoot | /var/www/example |
IPTable log analyzerのdirectory | /var/www/iptablelog |
IP指定でのアクセスに対する設定ファイル | /etc/apache2/sites-available/00-default |
バーチャルホスト その1(www.example.jp)指定でのアクセスに対する設定ファイル | /etc/apache2/sites-available/01-example |
IP指定でのアクセスログ | /var/log/apache2/ip/access.log |
FQDN指定でのアクセスログ | /var/log/apache2/fqdn/example/access.log |
FQDN指定でのエラーログ | /var/log/apache2/fqdn/example/error.log |
URL | www.example2.jp |
DocumentRoot | /var/www/example2 |
IPTable log analyzerのdirectory(共通設定) | /var/www/iptablelog |
IP指定でのアクセスに対する設定ファイル(共通設定) | /etc/apache2/sites-available/00-default |
バーチャルホスト その2(www.example2.jp)指定でのアクセスに対する設定ファイル | /etc/apache2/sites-available/02-example2 |
IP指定でのアクセスログ(共通設定) | /var/log/apache2/ip/access.log |
FQDN指定でのアクセスログ | /var/log/apache2/fqdn/example2/access.log |
FQDN指定でのエラーログ | /var/log/apache2/fqdn/example2/error.log |
※IPTable log analyzerとIP指定でのアクセス設定ファイル・ログはドメイン共通の設定となります。
バーチャルホスト設定について
設定ファイルは他のディストリビューションでもよく使用される/etc/apache2/apache2.confですが、debianの場合、apache2.conf の一番下で/etc/apache2/sites-enabled/フォルダをインクルードしており、sites-enabledフォルダの下にドメインごとに設定ファイルを作成するようになっています。
/etc/apache2/sites-enabled/の構成は以下の通りです。
www:/var/www# ls -al /etc/apache2/sites-enabled/ 合計 8 drwxr-xr-x 2 root root 4096 2010-01-24 20:03 . drwxr-xr-x 7 root root 4096 2010-01-24 20:03 .. lrwxrwxrwx 1 root root 26 2010-01-24 20:03 000-default -> ../sites-available/default
000-defaultはシンボリックリンクであり、実体は/etc/apache2/sites-available/defaultです。
次に、/etc/apache2/sites-available/フォルダの下を見てみます。
www:/var/www# ls -al /etc/apache2/sites-available/ 合計 20 drwxr-xr-x 2 root root 4096 2010-01-24 20:03 . drwxr-xr-x 7 root root 4096 2010-01-24 20:03 .. -rw-r--r-- 1 root root 950 2009-11-16 00:00 default -rw-r--r-- 1 root root 7366 2009-11-16 00:00 default-ssl
defaultファイルがあり、これがバーチャルホストの設定になります。
sites-available/ の下にバーチャルホスト毎の設定ファイルを作り、sites-enabled/ にシンボリックリンクを作っておくというのがdebianの流儀のようです。
なぜこのような仕組みになっているかといいますと、バーチャルホストが不要になった際、/etc/apache2/sites-enabled/ の下のシンボリックリンクを削除すれば良いわけですが、/etc/apache2/sites-available/のファイルを消さなければ、再度シンボリックリンクを張るだけでいつでもそのバーチャルホストを生かすことができるからです。
シンボリックリンクを張る、または削除するために、以下のような専用コマンドが用意されています。
- シンボリックリンクの作成(a2ensite)
/etc/apache2/sites-available/01-example
という設定ファイルを作成します。
# a2ensite 01-example
とすれば、
/etc/apache2/sites-available/01-example
へのシンボリックリンクが/etc/apache2/sites-enabled/の下に作成されます。 - シンボリックリンクの削除(a2dissite)
# a2dissite 01-example
とすれば/etc/apache2/sites-enabled/にあったシンボリックリンクだけが消され01-exampleの設定は無効になりますが、
/etc/apache2/sites-available/01-exampleは残りますので再度バーチャルドメインを生かしたくなった際にはa2ensiteで簡単に復旧できます。
※モジュールについても同じ考え方で、/etc/apache2/mods-enabled/の下のファイルが/etc/apache2/mods-available/の下のファイルへのシンボリックリンクになっており、a2enmod、a2dismod でモジュールの有効/無効を切り替えることが可能です。
IP指定でアクセスしてきた際の設定
それではようやく設定内容を説明していきます。
IP指定でのアクセスに対する設定ファイル名は上記「ディレクトリ構成について」の表に記載している通り、00-defaultとします。
www:~# mv /etc/apache2/sites-available/default /etc/apache2/sites-available/00-default
IP指定でのアクセスは不正アクセスが大半と考えられるため、思い切って全て拒否する設定にします。
編集するファイル:/etc/apache2/sites-available/00-default
<VirtualHost _default_:80> <Location /> Order deny,allow Deny from all </Location> ServerName dummy.example.jp DocumentRoot /var/www/default ErrorLog /var/log/apache2/ip/error.log LogLevel warn CustomLog /var/log/apache2/ip/access.log combined </VirtualHost>
他のバーチャルドメインで指定されていないアクセスは<VirtualHost _default_:80>が捕捉するため、IP指定のアクセスはこのディレクティブにマッチします。
ServerNameを存在しないdummyホストとし、DocumentRootを空のディレクトリとすることで、IP指定でアクセスした場合はコンテンツにアクセスできないようにしています。
また、ログもFQDNでのアクセスと分けています。
設定ファイルを作成したら、シンボリックリンクの作成です。先ほどdefaultから00-defaultに名前を変えてたため、もともとのdefaultのシンボリックリンクである000-defaultを削除するのを忘れないように気をつけます。
www:/etc/apache2/sites-enabled# a2dissite 000-default removing dangling symlink /etc/apache2/sites-enabled/000-default www:/etc/apache2/sites-enabled# a2ensite 00-default Enabling site 00-default. Run '/etc/init.d/apache2 reload' to activate new configuration!
FQDNでバーチャルホスト その1(www.example.jp)にアクセスしてきた際の設定
編集するファイル:/etc/apache2/sites-available/01-example
<VirtualHost *:80> DocumentRoot /var/www/example DirectoryIndex index.html index.php ServerName www.example.jp # デフォルトで全てdenyするように設定変更 <Directory /> Options FollowSymLinks AllowOverride None Order Deny,Allow Deny from all </Directory> # DocumentRootの設定 # 拒否したいアドレス・ドメイン名があれば指定し、 # それ以外のアクセスは全て許可する。 <Directory /var/www/example> Options FollowSymLinks AllowOverride all Order Deny,Allow Deny from XXX.XXX.XXX.0/255.255.255.0 Deny from xxx.com </Directory> # IPTable log analyzerの設定 # 許可したいアドレス・ドメイン名があれば指定し、 # それ以外のアクセスは全て拒否する。 Alias /iptablelog/ "/var/www/iptablelog/" <Directory "/var/www/iptablelog"> Options FollowSymLinks AllowOverride all Order allow,deny allow from 192.168.0.0/255.255.255.0 allow from YYY.YYY.YYY.0/255.255.255.0 </Directory> ErrorLog /var/log/apache2/fqdn/example/error.log LogLevel warn CustomLog /var/log/apache2/fqdn/example/access.log combined </VirtualHost>
設定ファイルが作成できたら、シンボリックリンクを作成します。
www:/etc/apache2/sites-available# a2ensite 01-example Enabling site 01-example. Run '/etc/init.d/apache2 reload' to activate new configuration!
FQDNでバーチャルホスト その2(www.example2.jp)にアクセスしてきた際の設定
編集するファイル:/etc/apache2/sites-available/02-example2
<VirtualHost *:80> DocumentRoot /var/www/example2 DirectoryIndex index.html index.php ServerName www.example2.jp # デフォルトで全てdenyするように設定変更 <Directory /> Options FollowSymLinks AllowOverride None Order Deny,Allow Deny from all </Directory> # DocumentRootの設定 # 拒否したいアドレス・ドメイン名があれば指定し、 # それ以外のアクセスは全て許可する。 <Directory /var/www/example2> Options FollowSymLinks AllowOverride all Order Deny,Allow Deny from XXX.XXX.XXX.0/255.255.255.0 Deny from xxx.com </Directory> ErrorLog /var/log/apache2/fqdn/example2/error.log LogLevel warn CustomLog /var/log/apache2/fqdn/example2/access.log combined </VirtualHost>
設定ファイルが作成できたら、シンボリックリンクを作成します。
www:/etc/apache2/sites-available# a2ensite 01-example2 Enabling site 01-example2. Run '/etc/init.d/apache2 reload' to activate new configuration!
上記設定ファイルのパラメータ備忘録
- Directoryについて
-
Indexes ディレクトリ上にindex.htmlがないとファイルの一覧表示する。 FollowSymLinks シンボリックリンクを許可する ExecCGI PHPは含まれない Multiviews HTTPサーバが持つコンテンツの中でクライアントに対して最適なコンテンツを自動的に選択して応答する機能 - AllowOverride
-
Noneとすれば、.htaccessを基本的に使用しない
- Order
-
allow,deny とすれば、基本的にアクセスを拒否し、allowで明記されているアクセスを許可する。
deny,allow とあれば、基本的にアクセスを許可し、denyの記述にマッチしたアクセスを拒否する。
- FilesMatchについて
-
.htaccessと.htpasswdを見せない。
ログ用のディレクトリを作成
www:/etc/apache2/sites-available# cd /var/log/apache2/ www:/var/log/apache2# mkdir ip www:/var/log/apache2# mkdir -p fqdn/example www:/var/log/apache2# mkdir -p fqdn/example2
ドキュメント用ディレクトリを作成
www:~# mkdir /var/www/example www:~# mkdir /var/www/example2 www:~# mkdir /var/www/default
logrotateの設定追加
apache2はログを大量に出力しますが、自動でローテートされないため、logrotateの設定を行います。
作成するファイル:/etc/logrotate.d/apache2-custom
/var/log/apache2/fqdn/example/*.log /var/log/apache2/fqdn/example2/*.log /var/log/apache2/ip/*.log { rotate 24 monthly missingok notifempty create 640 root adm sharedscripts postrotate if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then /etc/init.d/apache2 reload > /dev/null fi endscript }
記載方法についてはLogrotateの設定に載せていますので参考にして下さい。
設定反映
www:~# /etc/init.d/apache2 restart Restarting web server: apache2 ... waiting . www:~#
最後に
Apache MPM preforkのMaxclients以外のパラメータ(StartServers、MinSpareServers、MaxSpareServers、MaxRequestsPerChild)についてはApache2.2のパフォーマンスチューニング(その1)にまとめています。
MaxclientsについてはApache2.2のパフォーマンスチューニング(その2)にまとめています。
当サイトのApache2.2が実際にどの程度のアクセスまで耐えられるかはapache2.2の負荷試験で試しています。