Maxの日記: [外鯖] Apache+Zope with Pound
日記 by
Max
APSISのPound 1.3をRPM化してみる。
RPMとしては今のところ、PLDでしかパッケージされていない。
とりあえずrpmfind.netからPLD用のソースRPMを取ってくる。
specファイル最新の1.3に書き換え、や起動スクリプトを
Mandrake 9.0にあうように書き換え。ビルドしてみる。
pound-1.3-1mdk.i586.rpmができあがる。
# rpm -ql pound
/etc/pound
/etc/pound/pound.cfg
/etc/rc.d/init.d/pound
/usr/bin/pound
/usr/share/doc/pound-1.3
/usr/share/doc/pound-1.3/README
/usr/share/man/man8/pound.8.bz2
のような内容。
起動スクリプトはこんな感じで。
#!/bin/sh
#
# pound
#
# chkconfig: 345 85 15
# description: reverse-proxy and load-balancer
#
# Source function library
. /etc/rc.d/init.d/functions
# Get network config
. /etc/sysconfig/network
# Get service config
[ -f /etc/sysconfig/pound ] && . /etc/sysconfig/pound
# See how we were called.
case "$1" in
start)
# Check if the service is already running?
if [ ! -f /var/lock/subsys/pound ]; then
echo -n "Starting pound."
daemon pound -f /etc/pound/pound.cfg
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/pound
echo
else
echo "pound already started."
exit 1
fi
;;
stop)
# Stop daemons.
if [ -f /var/lock/subsys/pound ]; then
echo -n "Stopping pound."
killproc pound
rm -f /var/lock/subsys/pound > /dev/null 2>&1
echo
else
echo "pound is not running."
exit 1
fi
;
status)
status pound
RETVAL=$?
exit $RETVAL
;;
restart|reload)
$0 stop
$0 start
;;
*)
echo "usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
/etc/pound/pound.cfgに、それぞれPoundで取り扱いたいアクセス
を記述する。
*user nobody と group nobody
それぞれ、Poundを実行するユーザとグループを指定。
*ListenHTTP host,port
Pound自身がhttpでListenするIPアドレスとポート番号を記載する。
ex) ListenHTTP 1.2.3.4,80
*ListenHTTPS host,port cert_file [ciphers]
Pound自身がhttpsでListenするIPアドレスとポート番号、さらに
cert_fileで証明書ファイルを指定する。
ex) ListenHTTPS 1.2.3.4,443 /path/to/my/server.pem
後はそれぞれアクセスされる名前とバックエンドの対応を次のように
書く。
UrlGroup ".*"
HeadRequire Host ".*www.server0.com.*"
HeadDeny Host ".*www.server1.com.*"
BackEnd 192.168.0.10
EndGroup
UrlGroup ".*"
HeadRequire Host ".*www.server1.com.*"
HeadDeny Host ".*www.server0.com.*"
BackEnd 192.168.0.11
EndGroup
上記の例だと、バックエンドに192.168.0.10と192.168.0.11の二つ
があって、それぞれwww.server0.comとwww.server1.comという
名前で呼ばれる。
一つの鯖で、Poundをフロントエンドとしてapacheに回送するなら、
httpd.confに "Listen 127.0.0.1:80" などとして、BackEndに
ApacheがListenしているアドレスを書けばいいということかな。
それから、NameVirtualHostは使わないので全て消し。
ポート8080で動いているSiteAccessEnhanced(VirtualHostMonster)
も要らないので消す。
まずはデフォルトのhttpアクセスを転送する設定。
UrlGroup ".*"
HeadRequire Host "www.hogehoge.*"
BackEnd 127.0.0.1,80,1
EndGroup
zope.hogehoge -> hogehoge:8080
にするなら、単純に
UrlGroup ".*"
HeadRequire Host "zope.hogehoge.*"
BackEnd 127.0.0.1,8080,1
EndGroup
とでも書けばいいのかな。これでやってみる・・・おお、うまくいった。
なんて素晴らしいんだ<単純
httpsの設定などする必要があるが、続きは後ほど。
****
でっち上げの証明書をpem形式で作成:
# cd /etc/pound
# openssl req -x509 -newkey rs:1024 -keyout hogehoge.pem -out hogehoge.pem -days 730 -nodes
/etc/pound.cfgには次のように記述。
ListenHTTPS xxx.xxx.xxx.xxx,443 /etc/pound/hogehoge.pem
これでPoundを再起動。いまのこの状態だと、任意のURLをhttpsで
開けてしまうが、とりあえず動いた。
のこり、
・httpsで開くURLを限定する
(Zopeの管理画面はすべてhttps経由にするなど)
・WebDAVアクセスできるURLを限定する
・mod_frontpageでオーサリングするURLの設定(WebDAV設定兼)
・rpmパッケージとしての体裁調整(一部ミスがあった)
といったあたりかな。あとできれば、
・フィルタリング機能で特定パターンのアクセスに対して接続を拒否
を仕込みたい。Apacheのmod_antihakやZopeのRequestChecker
より全段で軽いプログラムにて除外できれば幸せかも。
さらにPoundならフィルタルールは pound.cfg に記述追加するだけ
なのでメンテナンス(新種ワーム追加など)も簡単だと思われるし。
RPMとしては今のところ、PLDでしかパッケージされていない。
とりあえずrpmfind.netからPLD用のソースRPMを取ってくる。
specファイル最新の1.3に書き換え、や起動スクリプトを
Mandrake 9.0にあうように書き換え。ビルドしてみる。
pound-1.3-1mdk.i586.rpmができあがる。
# rpm -ql pound
/etc/pound
/etc/pound/pound.cfg
/etc/rc.d/init.d/pound
/usr/bin/pound
/usr/share/doc/pound-1.3
/usr/share/doc/pound-1.3/README
/usr/share/man/man8/pound.8.bz2
のような内容。
起動スクリプトはこんな感じで。
#!/bin/sh
#
# pound
#
# chkconfig: 345 85 15
# description: reverse-proxy and load-balancer
#
# Source function library
. /etc/rc.d/init.d/functions
# Get network config
. /etc/sysconfig/network
# Get service config
[ -f /etc/sysconfig/pound ] && . /etc/sysconfig/pound
# See how we were called.
case "$1" in
start)
# Check if the service is already running?
if [ ! -f /var/lock/subsys/pound ]; then
echo -n "Starting pound."
daemon pound -f /etc/pound/pound.cfg
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/pound
echo
else
echo "pound already started."
exit 1
fi
;;
stop)
# Stop daemons.
if [ -f /var/lock/subsys/pound ]; then
echo -n "Stopping pound."
killproc pound
rm -f /var/lock/subsys/pound > /dev/null 2>&1
echo
else
echo "pound is not running."
exit 1
fi
;
status)
status pound
RETVAL=$?
exit $RETVAL
;;
restart|reload)
$0 stop
$0 start
;;
*)
echo "usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
/etc/pound/pound.cfgに、それぞれPoundで取り扱いたいアクセス
を記述する。
*user nobody と group nobody
それぞれ、Poundを実行するユーザとグループを指定。
*ListenHTTP host,port
Pound自身がhttpでListenするIPアドレスとポート番号を記載する。
ex) ListenHTTP 1.2.3.4,80
*ListenHTTPS host,port cert_file [ciphers]
Pound自身がhttpsでListenするIPアドレスとポート番号、さらに
cert_fileで証明書ファイルを指定する。
ex) ListenHTTPS 1.2.3.4,443 /path/to/my/server.pem
後はそれぞれアクセスされる名前とバックエンドの対応を次のように
書く。
UrlGroup ".*"
HeadRequire Host ".*www.server0.com.*"
HeadDeny Host ".*www.server1.com.*"
BackEnd 192.168.0.10
EndGroup
UrlGroup ".*"
HeadRequire Host ".*www.server1.com.*"
HeadDeny Host ".*www.server0.com.*"
BackEnd 192.168.0.11
EndGroup
上記の例だと、バックエンドに192.168.0.10と192.168.0.11の二つ
があって、それぞれwww.server0.comとwww.server1.comという
名前で呼ばれる。
一つの鯖で、Poundをフロントエンドとしてapacheに回送するなら、
httpd.confに "Listen 127.0.0.1:80" などとして、BackEndに
ApacheがListenしているアドレスを書けばいいということかな。
それから、NameVirtualHostは使わないので全て消し。
ポート8080で動いているSiteAccessEnhanced(VirtualHostMonster)
も要らないので消す。
まずはデフォルトのhttpアクセスを転送する設定。
UrlGroup ".*"
HeadRequire Host "www.hogehoge.*"
BackEnd 127.0.0.1,80,1
EndGroup
zope.hogehoge -> hogehoge:8080
にするなら、単純に
UrlGroup ".*"
HeadRequire Host "zope.hogehoge.*"
BackEnd 127.0.0.1,8080,1
EndGroup
とでも書けばいいのかな。これでやってみる・・・おお、うまくいった。
なんて素晴らしいんだ<単純
httpsの設定などする必要があるが、続きは後ほど。
****
でっち上げの証明書をpem形式で作成:
# cd /etc/pound
# openssl req -x509 -newkey rs:1024 -keyout hogehoge.pem -out hogehoge.pem -days 730 -nodes
/etc/pound.cfgには次のように記述。
ListenHTTPS xxx.xxx.xxx.xxx,443 /etc/pound/hogehoge.pem
これでPoundを再起動。いまのこの状態だと、任意のURLをhttpsで
開けてしまうが、とりあえず動いた。
のこり、
・httpsで開くURLを限定する
(Zopeの管理画面はすべてhttps経由にするなど)
・WebDAVアクセスできるURLを限定する
・mod_frontpageでオーサリングするURLの設定(WebDAV設定兼)
・rpmパッケージとしての体裁調整(一部ミスがあった)
といったあたりかな。あとできれば、
・フィルタリング機能で特定パターンのアクセスに対して接続を拒否
を仕込みたい。Apacheのmod_antihakやZopeのRequestChecker
より全段で軽いプログラムにて除外できれば幸せかも。
さらにPoundならフィルタルールは pound.cfg に記述追加するだけ
なのでメンテナンス(新種ワーム追加など)も簡単だと思われるし。
[外鯖] Apache+Zope with Pound More ログイン