Apache 2経由でアクセスするときには、URL等がZopeサーバの時とは変更になります。そのため VirtualHostMonster という Zope に標準で入っているプロダクトを使用して、
VirtualHostMonster を選択して追加します。Idは何でもいいですが、わかりやすくするために VirtualHostMonster というIdにしておきます。
次に、Apache 2をインストールします。
Vine Linuxにインストールする場合は簡単で、下記のコマンドを実行するだけです。
% sudo apt-get install apache2
この段階で、Apache 2を起動しWeb browserでアクセスしてトップページが表示されることを確認します。
Apache 2とZopeを連携させる設定を行ないます。例として以下のような設定を行なうこととします。
エディタでApache 2の設定ファイルを開きます。Windowsでは
C:\Program Files\Apache Group\Apache2\conf\httpd.conf
Vine Linuxでは /etc/apache2/conf/httpd.conf に設定ファイルがあります。
まず ServerAdmin という行があるので、もし # でコメントアウトされていたらそのコメントアウトをはずして、管理者のメールアドレスを記述します。::
ServerAdmin admin@example.com
次に ServerName という行があるので、もし # でコメントアウトされていたらそのコメントアウトをはずして、サーバ名を記述します。::
ServerName www.example.com:80
Apache 2とZopeが連携できるように、Apach 2のproxyモジュール(mod_proxy)と、URL書き換えモジュール(mod_rewrite)を使用できるようにします。もし、以下の行が # でコメントアウトされていたら、コメントをはずして有効にします。::
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule rewrite_module modules/mod_rewrite.so
最後に、実際にApache 2とZopeを連携させるためのバーチャルホストの設定をファイルに追加します。:
NameVirtualHost *
<VirtualHost *>
ServerName www.example.com
RewriteEngine On
RewriteRule ^/Zope(.*) http://localhost:8080/VirtualHostBase/http/www.example.com:80/VirtualHostRoot/_vh_Zope/$1 [L,P]
</VirtualHost>
<VirtualHost *>
ServerName blog.example.com
RewriteEngine On
RewriteRule ^(.*) http://localhost:8080/VirtualHostBase/http/blog.example.com:80/blog/VirtualHostRoot/$1 [L,P]
</VirtualHost>
編集が終了したら、設定ファイルを保存します。
設定終了後、Apache 2を再起動します。再起動する場合は、まず最初に設定ファイルに文法的に間違いがないかチェックしてから、行ないます。
% sudo /etc/init.d/apache2 configtest % sudo /etc/init.d/apache2 reload
Apache 2が再起動したら、Web browserで下記のURLにアクセスし、正しく画面が表示されることを確認します。
ここまでの設定でApache 2とZopeサーバの連携は行なえますが、Zopeサーバ側でWeb browserのIPアドレスがとれるようにするために、以下の設定を行なうことをおすすめします。
それは、信頼できる proxyサーバを指定する trusted-proxy です。ここにproxyとして設定したApache 2サーバのIPアドレスを指定します。ZopeサーバとApache 2が同じマシン上で動作している場合は、以下の記述を zope.conf ファイルに追加します。
trusted-proxy 127.0.0.1
zope.conf の編集後、Zopeサーバの再起動を行ないます。こうすることにより、Zopeサーバ側でも REQUEST.getClientAddr() とすると Web browser のIPアドレスを取得できるようになります。
以上で、Apache 2とZopeの連携を行なえるようになりました。
ただし、上記の設定は基本的な設定です。他にもApache 2側で、キャッシュの設定や、ワームのログを出さないようにしたり、各VirtualHost毎にアクセスログを出力したりといった設定を行なったほうが、より安全で利便性があがります。
これらの設定については Apache 2のログ出力設定 を参照してください。
Webサーバを外部に公開すると、いろいろなワームがやってきます。そのようなワームからのメッセージをはじいて、アクセスログに出力しないようにする設定について説明します。
setenvif_module の有効化 wormをはじく設定を記述できるようにするために、setenvif_module を有効にします。以下の行がコメントアウトされていたら有効にします。:
LoadModule setenvif_module modules/mod_setenvif.so
ワームとなるURIのパターンを SetEnvIf を使用して指定します。:
SetEnvIf Request_URI "default\.ida" worm !log
SetEnvIf Request_URI "cmd\.exe" worm !log
SetEnvIf Request_URI "root\.exe" worm !log
SetEnvIf Request_URI "Admin\.dll" worm !log
SetEnvIf Request_URI "NULL\.IDA" worm !log
アクセスログとして保存するHTTPのメソッドを指定します。:
SetEnvIf Request_Method "(GET)|(POST)|(PUT)|(DELETE)|(HEAD)" log
画像ファイルやCSS等をログとして保存しないように設定します。:
SetEnvIf Request_URI "(\.gif|\.jpe?g|\.png|\.css|\.js)$" !log
また、内部のネットワークからのアクセスはログとして保存しないように設定します。:
SetEnvIf Remote_Addr "^192\.168\." !log
SetEnvIf Remote_Addr "^127\.0\." !log
アクセスログとワームログに振り分けて保存するために、以下のように記述します。:
CustomLog /var/log/httpd/access_log combined env=log
CustomLog /var/log/httpd/worm_log combined env=worm
設定が終了したらApache 2を再起動し、ログが分離して保存されていることを確認します。
Apache 2とZopeの組み合わせで、簡単に複数のバーチャルホストを運用することが出来ます。アクセスログ解析をするときに、それらのログがホストごとに分かれていた方が後々都合がよいので、そのような設定をします。
バーチャルホストの設定に、以下のように CustomLog の記述を追加します。:
NameVirtualHost *
<VirtualHost *>
ServerName www.example.com
RewriteEngine On
RewriteRule ^/Zope(.*) http://localhost:8080/VirtualHostBase/http/www.example.com:80/VirtualHostRoot/_vh_Zope/$1 [L,P]
CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/example_log.%Y%m%d 86400 +540" combined env=log
</VirtualHost>
<VirtualHost *>
ServerName blog.example.com
RewriteEngine On
RewriteRule ^(.*) http://localhost:8080/VirtualHostBase/http/blog.example.com:80/blog/VirtualHostRoot/$1 [L,P]
CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/blog_log.%Y%m%d 86400 +540" combined env=log
</VirtualHost>
また、ここでは rotatelogs コマンドを使用して、ログファイルを日付が付いたファイル名で作成するように設定しています。
設定が終了したらApache 2を再起動し、バーチャルホストごとのアクセスログが出力されていることを確認します。
Apache 2のログ出力設定 によって、バーチャルホストごとにアクセスログが出力されるようになりました。ここでは、その出力されたログを解析する方法について記述します。
なお、アクセスログは以下のように出力されるという前提で話を進めます。
アクセスログの解析には AWStats というログ解析ソフトを使用します。ここでは、AWStatsのインストール手順を記述します。
最初に、AWStatsのアーカイブファイルをダウンロードして /usr/local/awstats に展開します。
% cd /usr/local/ % sudo su # tar xfz awstats-6.3.tgz # mv awstats-6.3 awstats
次に、設定スクリプト awstats_configure.pl を実行します。いくつか質問されるので設定値を入力します。
# cd awstats/tool # perl awstats_configure.pl : : Enter full config file path of your Web server. Example: /etc/httpd/httpd.conf Example: /usr/local/apache2/conf/httpd.conf Example: c:\Program files\apache group\apache\conf\httpd.conf Config file path (none to skip web server setup): > /etc/apache2/conf/httpd.conf ← Apacheの設定ファイルの場所 : : -----> Need to create a new config file ? Do you want me to build a new AWStats config/profile file (required if first install) (y/N) ? y ←設定ファイルを生成する-----> Define config file name to create What is the name of your web site or profile analysis ? Example: www.mysite.com Example: demo Your web site, virtual server or profile name: > www.example.com ←サーバの名前を指定
-----> Define config file path In which directory do you plan to store your config file(s) ? Default: /etc/awstats Directory path to store config file(s) (Enter for default): > ←デフォルトでいいので何も入力しない : :
設定スクリプトを実行することにより、Apache 2の設定ファイル /etc/apache2/conf/httpd.conf に AWStats 用の設定が記述されます。
また、www.example.com 用の設定ファイルが /etc/awstats/awstats.www.example.com.conf に作成されます。
次に、この設定ファイルを修正します。修正個所は以下の3点です。
# cd /etc/awstats # cp awstats.www.example.com.conf org # vi awstats.www.example.com.conf # diff awstats.www.example.com.conf org # 51c51 < LogFile="/var/log/httpd/example_log.%YYYY-1%MM-1%DD-1" --- > LogFile="/var/log/httpd/mylog.log" 182c182 < DNSLookup=1 --- > DNSLookup=2 862c862 < Lang="jp" --- > Lang="auto"
AWStatsを実行する準備が整ったので、過去のログファイルに対して以下のコマンドを実行して解析を行ないます。その前に、ログ解析の結果を保存するディレクトリ /var/lib/awstats を作成します。
# mkdir /var/lib/awstats # tcsh # foreach log ( /var/log/httpd/example_log.* ) foreach? sudo ./awstats.pl -config=www.example.com -LogFile=$log foreach? end
http://127.0.0.1/awstats/awstats.pl?config=www.example.com にアクセスして、ログの解析結果が表示されることを確認します。
www.example.com用の設定ファイルをコピーして、blog.example.com用の設定ファイルを作成します。
# cd /etc/awstats # cp awstats.www.example.com.conf awstats.blog.example.com.conf # vi awstats.blog.example.com.conf # diff awstats.www.example.com.conf awstats.blog.example.com.conf 51c51 < LogFile="/var/log/httpd/example_log.%YYYY-1%MM-1%DD-1" --- > LogFile="/var/log/httpd/blog_log.%YYYY-1%MM-1%DD-1" 147c147 < SiteDomain="www.example.com" --- > SiteDomain="blog.example.com"
その後同様にログ解析を行ないます。
# tcsh # foreach log ( /var/log/httpd/blog_log.* ) foreach? sudo ./awstats.pl -config=blog.example.com -LogFile=$log foreach? end
http://127.0.0.1/awstats/awstats.pl?config=blog.example.com にアクセスして、ログの解析結果が表示されることを確認します。
自動実行の設定[cron]
今後はアクセスログの解析を自動で行なうようにするために、cronの設定を行ないます。一時間毎にログ解析を実行するように、/etc/cron.hourly/ に以下のスクリプトを awstats という名前で作成します。なお、スクリプトに実行権限(+x)をつけることを忘れないようにしてください。
# cd /etc/cron.hourly # vi awstats # chmod +x awstats
#!/bin/sh cd /usr/local/awstats/wwwroot/cgi-bin ./awstats.pl -config=www.example.com > /dev/null ./awstats.pl -config=blog.example.com > /dev/null
以上で、ログ解析の設定は終わりです。あとは定期的にログ解析の結果をチェックし、問題がないかをなどを確認します。
Apache 2のログ出力設定 で設定したように、ログファイルを /var/log/httpd ディレクトリに出力するようにしました。
ここでは、そのログファイルを一ヵ月後とに圧縮して保存するようにします。
その方法は、以下のスクリプトを /etc/cron.monthly/gzip_log というファイルを作成して、毎月実行されるようにします。:
#!/bin/sh # ログファイル出力ディレクトリに移動 cd /var/log/httpd # 先月のYYYYMM形式の文字列を取得 mon=`env TZ=JST+15 date +"%Y%m"` # ファイルをYYYYMMディレクトリに移動して圧縮 mkdir $mon mv *_log.$mon?? $mon/ gzip $mon/*