nullpopopoでタグ「apache」が付けられているもの
前回までのエントリー(コレとコレ)で、heartbeatのインストールとVIPの引継ぎができました。しかしそれだけじゃ冗長化には程遠いってのが人情。次は、apacheのサービスを引き継がせてみましょう。
■ httpdの停止
[重要]
heartbeatの設定をする前に、既存のhttpdを停止します。勿論、httpdの自動起動も停止しておきます。これは、今後httpdの起動停止をheartbeatがつかさどるためです。
[root@ishikari ~]# /etc/init.d/httpd stop
[root@ishikari ~]# chkconfig httpd off
[root@ishikari ~]# chkconfig httpd --list
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
↑
すべてのランレベルでoffになっていることを確認する。
※ 注意
yumでhttpdをインストールして、/etc/sysconfig/httpd ファイルを使って apache を worker モードで動かしている場合、heartbeat経由ではこの設定が失われてしまいます(preforkで動作してしまうってこと)。よって、 /usr/sbin/httpd を /usr/sbin/httpd.orig としてバックアップし、 /usr/sbin/httpd.worker へのシンボリックリンクとして /usr/sbin/httpd を設定すること。
例)
# mv /usr/sbin/httpd /usr/sbin/httpd.orig ; ln -s /usr/sbin/httpd.worker /usr/sbin/httpd
■ heartbeat停止
一旦両系でheartbeatを停止します。
[root@ishikari ~]# /etc/init.d/heartbeat stop
Stopping High-Availability services:
[ OK ]
■ httpd監視設定を行う
[root@ishikari ~]# cd /var/lib/heartbeat/crm/
※ すべてのファイルをバックアップする
[root@ishikari crm]# tar czf cib.tar.gz *
※ cib.xml.last cib.xml.sig cib.xml.sig.last を削除する
[root@ishikari crm]# rm -f cib.xml.last cib.xml.sig cib.xml.sig.last
cib.xml を編集する
[root@ishikari crm]# vi cib.xml
まず、<nodes>タグの直下にある、<resources>の閉じタグ「<resources/>」を削除します。(そもそも閉じタグだけで、<resources> タグが開始されていないが・・・)
※ ここを
<nodes>
<node id="12979f53-e6ec-40f0-a7c2-66dfadf286ba" uname="sorachi.in.example.com" type="normal"/>
<node id="82d27f7b-4e9a-478e-bcc1-80da0140a4a7" uname="ishikari.in.example.com" type="normal"/>
</nodes>
<resources/>
※ こうする
<nodes>
<node id="12979f53-e6ec-40f0-a7c2-66dfadf286ba" uname="sorachi.in.example.com" type="normal"/>
<node id="82d27f7b-4e9a-478e-bcc1-80da0140a4a7" uname="ishikari.in.example.com" type="normal"/>
</nodes>
次に、<nodes>タグの直下に、以下を追記します。
ココで投入する固有の値は「group_apache(どうやらグループの名前は何でもよいっぽい)」「192.168.0.200(httpをlistenするVIPの値)」「eth0(VIPをeth0インターフェイスのエイリアスにする)」「24(サブネットマスクのビット数)」「/etc/httpd/conf/httpd.conf(httpd.confのフルパス)」です。
<resources>
<group id="group_apache">
<primitive id="ipaddr" class="ocf" type="IPaddr" provider="heartbeat">
<instance_attributes id="ia_ipaddr">
<attributes>
<nvpair id="ia_ipaddr_ip" name="ip" value="192.168.0.200"/>
<nvpair id="ia_ipaddr_nic" name="nic" value="eth0"/>
<nvpair id="ia_ipaddr_netmask" name="netmask" value="24"/>
</attributes>
</instance_attributes>
</primitive>
<primitive id="apache" class="ocf" type="apache" provider="heartbeat">
<instance_attributes id="ia_apache">
<attributes>
<nvpair id="ia_apache_configfile" name="configfile" value="/etc/httpd/conf/httpd.conf"/>
</attributes>
</instance_attributes>
</primitive>
</group>
</resources>
以上の設定が終わったら保存します。
■ httpd.confを修正する
[root@ishikari crm]# cd /etc/httpd/conf
[root@ishikari conf]# cp -p httpd.conf httpd.conf.20090104
[root@ishikari conf]# vi httpd.conf
※ ここを
Listen 80
※ こうする
Listen 192.168.0.200:80
※ ここを
#<Location /server-status>
# SetHandler server-status
# Order deny,allow
# Deny from all
# Allow from .example.com
#</Location>
※ こうする
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 192.168.0
</Location>
■ heartbeatを起動する
[root@ishikari ~]# /etc/init.d/heartbeat start
Starting High-Availability services:
[ OK ]
[root@sorachi ~]# /etc/init.d/heartbeat start
Starting High-Availability services:
[ OK ]
■ 起動後の確認
しばらく時間をおいて、両系にて監視コマンドを実行します。以下のように表示されていればOK。
= ココに注目! =================================================================================
ipaddr (heartbeat::ocf:IPaddr): Started sorachi.in.example.com
apache (heartbeat::ocf:apache): Started sorachi.in.example.com
================================================================================================
[root@ishikari ~]# crm_mon -i 3
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode
============
Last updated: Sun Jan 4 04:43:09 2009
Current DC: sorachi.in.example.com (12979f53-e6ec-40f0-a7c2-66dfadf286ba)
2 Nodes configured.
1 Resources configured.
============
Node: sorachi.in.example.com (12979f53-e6ec-40f0-a7c2-66dfadf286ba): online
Node: ishikari.in.example.com (82d27f7b-4e9a-478e-bcc1-80da0140a4a7): online
Resource Group: group_apache
ipaddr (heartbeat::ocf:IPaddr): Started sorachi.in.example.com
apache (heartbeat::ocf:apache): Started sorachi.in.example.com
[root@sorachi ~]# crm_mon -i 3
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode
============
Last updated: Sun Jan 4 04:43:18 2009
Current DC: sorachi.in.example.com (12979f53-e6ec-40f0-a7c2-66dfadf286ba)
2 Nodes configured.
1 Resources configured.
============
Node: sorachi.in.example.com (12979f53-e6ec-40f0-a7c2-66dfadf286ba): online
Node: ishikari.in.example.com (82d27f7b-4e9a-478e-bcc1-80da0140a4a7): online
Resource Group: group_apache
ipaddr (heartbeat::ocf:IPaddr): Started sorachi.in.example.com
apache (heartbeat::ocf:apache): Started sorachi.in.example.com
■■ 実際の動きを見てみた
テストコンテンツとして、各々のホスト名を書いたindex.htmlをドキュメントルートに配置。sorachiのeth0を抜き差しして片系障害をおこし、フェイルオーバー/フェイルバックされることを確認しました。また、ifconfigコマンドで確認すると、httpdが生きている間は、ちゃんとVIPが設定されています。
【httpdが生きているsorachi】
[oresama@sorachi ~]$ ps auxwww | grep [h]eartbeat
root 22169 0.0 0.5 12072 12072 ? SLs 07:23 0:00 heartbeat: master control process
nobody 22172 0.0 0.2 5476 5476 ? SL 07:23 0:00 heartbeat: FIFO reader
nobody 22173 0.0 0.2 5472 5472 ? SL 07:23 0:00 heartbeat: write: ucast eth1
nobody 22174 0.0 0.2 5472 5472 ? SL 07:23 0:00 heartbeat: read: ucast eth1
498 22178 0.0 0.0 4900 1756 ? S 07:23 0:00 /usr/lib/heartbeat/ccm
498 22179 0.2 0.1 6628 2868 ? S 07:23 0:00 /usr/lib/heartbeat/cib
nobody 22180 0.0 0.0 4596 1616 ? S 07:23 0:00 /usr/lib/heartbeat/lrmd -r
nobody 22181 0.0 0.2 4628 4628 ? SL 07:23 0:00 /usr/lib/heartbeat/stonithd
498 22182 0.0 0.0 4784 1716 ? S 07:23 0:00 /usr/lib/heartbeat/attrd
498 22183 0.0 0.1 5604 2268 ? S 07:23 0:00 /usr/lib/heartbeat/crmd
root 22184 3.1 0.1 5920 2096 ? S 07:23 0:02 /usr/lib/heartbeat/mgmtd -v
root 22185 0.0 0.0 4544 1316 ? S 07:23 0:00 /usr/lib/heartbeat/pingd -m 100 -d 5s -a default_ping_set
[oresama@sorachi ~]$ ps auxwww | grep [h]ttpd
root 22443 0.2 0.3 14736 7332 ? Ss 07:23 0:00 /usr/sbin/httpd -DSTATUS -f /etc/httpd/conf/httpd.conf
apache 22454 0.0 0.4 2660000 10232 ? Sl 07:23 0:00 /usr/sbin/httpd -DSTATUS -f /etc/httpd/conf/httpd.conf
[oresama@sorachi ~]$ /sbin/ifconfig
eth0 Link encap:Ethernet HWaddr 00:90:CC:E9:30:AB
inet addr:192.168.0.101 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::290:ccff:fee9:30ab/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:47609 errors:0 dropped:0 overruns:0 frame:0
TX packets:50473 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:11591250 (11.0 MiB) TX bytes:24177872 (23.0 MiB)
Interrupt:193 Base address:0xa000
eth0:0 Link encap:Ethernet HWaddr 00:90:CC:E9:30:AB
inet addr:192.168.0.200 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:193 Base address:0xa000
eth1 Link encap:Ethernet HWaddr 00:C0:9F:1A:3C:F2
inet addr:192.168.1.101 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::2c0:9fff:fe1a:3cf2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8757 errors:0 dropped:0 overruns:0 frame:0
TX packets:8879 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:2555439 (2.4 MiB) TX bytes:2625068 (2.5 MiB)
Base address:0xecc0 Memory:fe100000-fe120000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:18876 errors:0 dropped:0 overruns:0 frame:0
TX packets:18876 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4157055 (3.9 MiB) TX bytes:4157055 (3.9 MiB)
【httpdが死んでいるishikari】
[oresama@ishikari ~]$ ps auxwww | grep [h]eartbeat
root 14050 0.0 0.5 12076 12076 ? SLs 06:53 0:00 heartbeat: master control process
nobody 14053 0.0 0.2 5480 5480 ? SL 06:53 0:00 heartbeat: FIFO reader
nobody 14054 0.0 0.2 5476 5476 ? SL 06:53 0:00 heartbeat: write: ucast eth1
nobody 14055 0.0 0.2 5476 5476 ? SL 06:53 0:00 heartbeat: read: ucast eth1
498 14058 0.0 0.0 4928 2008 ? S 06:53 0:00 /usr/lib/heartbeat/ccm
498 14059 0.2 0.1 6628 2936 ? S 06:53 0:03 /usr/lib/heartbeat/cib
root 14060 0.0 0.0 4896 1880 ? S 06:53 0:00 /usr/lib/heartbeat/lrmd -r
nobody 14061 0.0 0.2 4624 4624 ? SL 06:53 0:00 /usr/lib/heartbeat/stonithd
498 14062 0.0 0.0 5188 1820 ? S 06:53 0:00 /usr/lib/heartbeat/attrd
498 14063 0.0 0.1 5624 2668 ? S 06:53 0:00 /usr/lib/heartbeat/crmd
root 14064 0.0 0.0 5924 1912 ? S 06:53 0:00 /usr/lib/heartbeat/mgmtd -v
root 14065 0.0 0.0 4544 1336 ? S 06:53 0:00 /usr/lib/heartbeat/pingd -m 100 -d 5s -a default_ping_set
498 15217 0.0 0.1 5132 2124 ? S 06:55 0:00 /usr/lib/heartbeat/tengine
498 15218 0.0 0.1 5760 2380 ? S 06:55 0:00 /usr/lib/heartbeat/pengine
[oresama@ishikari ~]$ ps auxwww | grep [h]ttpd
[oresama@ishikari ~]$ /sbin/ifconfig
eth0 Link encap:Ethernet HWaddr 00:90:CC:E9:2D:DD
inet addr:192.168.0.100 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::290:ccff:fee9:2ddd/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:45991 errors:0 dropped:0 overruns:0 frame:0
TX packets:51372 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:11094384 (10.5 MiB) TX bytes:15222245 (14.5 MiB)
Interrupt:201 Base address:0xc000
eth1 Link encap:Ethernet HWaddr 00:C0:9F:1A:3C:2D
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::2c0:9fff:fe1a:3c2d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8820 errors:0 dropped:0 overruns:0 frame:0
TX packets:8785 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:2631005 (2.5 MiB) TX bytes:2542771 (2.4 MiB)
Base address:0xecc0 Memory:fe100000-fe120000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:18799 errors:0 dropped:0 overruns:0 frame:0
TX packets:18799 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4120744 (3.9 MiB) TX bytes:4120744 (3.9 MiB)
これで切替の基本動作はOK。sorachiのネットワークケーブルを抜いてから3秒で検知し、その後3秒でapacheが切り替わり、sorachiのネットワーク復旧は5秒で検知し、その後apacheは5秒で切り替わりました。都合6秒で切り替わり、復旧は都合10秒。
ね、簡単でしょ?
■ httpdの停止
[重要]
heartbeatの設定をする前に、既存のhttpdを停止します。勿論、httpdの自動起動も停止しておきます。これは、今後httpdの起動停止をheartbeatがつかさどるためです。
[root@ishikari ~]# /etc/init.d/httpd stop
[root@ishikari ~]# chkconfig httpd off
[root@ishikari ~]# chkconfig httpd --list
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
↑
すべてのランレベルでoffになっていることを確認する。
※ 注意
yumでhttpdをインストールして、/etc/sysconfig/httpd ファイルを使って apache を worker モードで動かしている場合、heartbeat経由ではこの設定が失われてしまいます(preforkで動作してしまうってこと)。よって、 /usr/sbin/httpd を /usr/sbin/httpd.orig としてバックアップし、 /usr/sbin/httpd.worker へのシンボリックリンクとして /usr/sbin/httpd を設定すること。
例)
# mv /usr/sbin/httpd /usr/sbin/httpd.orig ; ln -s /usr/sbin/httpd.worker /usr/sbin/httpd
■ heartbeat停止
一旦両系でheartbeatを停止します。
[root@ishikari ~]# /etc/init.d/heartbeat stop
Stopping High-Availability services:
[ OK ]
■ httpd監視設定を行う
[root@ishikari ~]# cd /var/lib/heartbeat/crm/
※ すべてのファイルをバックアップする
[root@ishikari crm]# tar czf cib.tar.gz *
※ cib.xml.last cib.xml.sig cib.xml.sig.last を削除する
[root@ishikari crm]# rm -f cib.xml.last cib.xml.sig cib.xml.sig.last
cib.xml を編集する
[root@ishikari crm]# vi cib.xml
まず、<nodes>タグの直下にある、<resources>の閉じタグ「<resources/>」を削除します。(そもそも閉じタグだけで、<resources> タグが開始されていないが・・・)
※ ここを
<nodes>
<node id="12979f53-e6ec-40f0-a7c2-66dfadf286ba" uname="sorachi.in.example.com" type="normal"/>
<node id="82d27f7b-4e9a-478e-bcc1-80da0140a4a7" uname="ishikari.in.example.com" type="normal"/>
</nodes>
<resources/>
※ こうする
<nodes>
<node id="12979f53-e6ec-40f0-a7c2-66dfadf286ba" uname="sorachi.in.example.com" type="normal"/>
<node id="82d27f7b-4e9a-478e-bcc1-80da0140a4a7" uname="ishikari.in.example.com" type="normal"/>
</nodes>
次に、<nodes>タグの直下に、以下を追記します。
ココで投入する固有の値は「group_apache(どうやらグループの名前は何でもよいっぽい)」「192.168.0.200(httpをlistenするVIPの値)」「eth0(VIPをeth0インターフェイスのエイリアスにする)」「24(サブネットマスクのビット数)」「/etc/httpd/conf/httpd.conf(httpd.confのフルパス)」です。
<resources>
<group id="group_apache">
<primitive id="ipaddr" class="ocf" type="IPaddr" provider="heartbeat">
<instance_attributes id="ia_ipaddr">
<attributes>
<nvpair id="ia_ipaddr_ip" name="ip" value="192.168.0.200"/>
<nvpair id="ia_ipaddr_nic" name="nic" value="eth0"/>
<nvpair id="ia_ipaddr_netmask" name="netmask" value="24"/>
</attributes>
</instance_attributes>
</primitive>
<primitive id="apache" class="ocf" type="apache" provider="heartbeat">
<instance_attributes id="ia_apache">
<attributes>
<nvpair id="ia_apache_configfile" name="configfile" value="/etc/httpd/conf/httpd.conf"/>
</attributes>
</instance_attributes>
</primitive>
</group>
</resources>
以上の設定が終わったら保存します。
■ httpd.confを修正する
[root@ishikari crm]# cd /etc/httpd/conf
[root@ishikari conf]# cp -p httpd.conf httpd.conf.20090104
[root@ishikari conf]# vi httpd.conf
※ ここを
Listen 80
※ こうする
Listen 192.168.0.200:80
※ ここを
#<Location /server-status>
# SetHandler server-status
# Order deny,allow
# Deny from all
# Allow from .example.com
#</Location>
※ こうする
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 192.168.0
</Location>
■ heartbeatを起動する
[root@ishikari ~]# /etc/init.d/heartbeat start
Starting High-Availability services:
[ OK ]
[root@sorachi ~]# /etc/init.d/heartbeat start
Starting High-Availability services:
[ OK ]
■ 起動後の確認
しばらく時間をおいて、両系にて監視コマンドを実行します。以下のように表示されていればOK。
= ココに注目! =================================================================================
ipaddr (heartbeat::ocf:IPaddr): Started sorachi.in.example.com
apache (heartbeat::ocf:apache): Started sorachi.in.example.com
================================================================================================
[root@ishikari ~]# crm_mon -i 3
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode
============
Last updated: Sun Jan 4 04:43:09 2009
Current DC: sorachi.in.example.com (12979f53-e6ec-40f0-a7c2-66dfadf286ba)
2 Nodes configured.
1 Resources configured.
============
Node: sorachi.in.example.com (12979f53-e6ec-40f0-a7c2-66dfadf286ba): online
Node: ishikari.in.example.com (82d27f7b-4e9a-478e-bcc1-80da0140a4a7): online
Resource Group: group_apache
ipaddr (heartbeat::ocf:IPaddr): Started sorachi.in.example.com
apache (heartbeat::ocf:apache): Started sorachi.in.example.com
[root@sorachi ~]# crm_mon -i 3
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode
============
Last updated: Sun Jan 4 04:43:18 2009
Current DC: sorachi.in.example.com (12979f53-e6ec-40f0-a7c2-66dfadf286ba)
2 Nodes configured.
1 Resources configured.
============
Node: sorachi.in.example.com (12979f53-e6ec-40f0-a7c2-66dfadf286ba): online
Node: ishikari.in.example.com (82d27f7b-4e9a-478e-bcc1-80da0140a4a7): online
Resource Group: group_apache
ipaddr (heartbeat::ocf:IPaddr): Started sorachi.in.example.com
apache (heartbeat::ocf:apache): Started sorachi.in.example.com
■■ 実際の動きを見てみた
テストコンテンツとして、各々のホスト名を書いたindex.htmlをドキュメントルートに配置。sorachiのeth0を抜き差しして片系障害をおこし、フェイルオーバー/フェイルバックされることを確認しました。また、ifconfigコマンドで確認すると、httpdが生きている間は、ちゃんとVIPが設定されています。
【httpdが生きているsorachi】
[oresama@sorachi ~]$ ps auxwww | grep [h]eartbeat
root 22169 0.0 0.5 12072 12072 ? SLs 07:23 0:00 heartbeat: master control process
nobody 22172 0.0 0.2 5476 5476 ? SL 07:23 0:00 heartbeat: FIFO reader
nobody 22173 0.0 0.2 5472 5472 ? SL 07:23 0:00 heartbeat: write: ucast eth1
nobody 22174 0.0 0.2 5472 5472 ? SL 07:23 0:00 heartbeat: read: ucast eth1
498 22178 0.0 0.0 4900 1756 ? S 07:23 0:00 /usr/lib/heartbeat/ccm
498 22179 0.2 0.1 6628 2868 ? S 07:23 0:00 /usr/lib/heartbeat/cib
nobody 22180 0.0 0.0 4596 1616 ? S 07:23 0:00 /usr/lib/heartbeat/lrmd -r
nobody 22181 0.0 0.2 4628 4628 ? SL 07:23 0:00 /usr/lib/heartbeat/stonithd
498 22182 0.0 0.0 4784 1716 ? S 07:23 0:00 /usr/lib/heartbeat/attrd
498 22183 0.0 0.1 5604 2268 ? S 07:23 0:00 /usr/lib/heartbeat/crmd
root 22184 3.1 0.1 5920 2096 ? S 07:23 0:02 /usr/lib/heartbeat/mgmtd -v
root 22185 0.0 0.0 4544 1316 ? S 07:23 0:00 /usr/lib/heartbeat/pingd -m 100 -d 5s -a default_ping_set
[oresama@sorachi ~]$ ps auxwww | grep [h]ttpd
root 22443 0.2 0.3 14736 7332 ? Ss 07:23 0:00 /usr/sbin/httpd -DSTATUS -f /etc/httpd/conf/httpd.conf
apache 22454 0.0 0.4 2660000 10232 ? Sl 07:23 0:00 /usr/sbin/httpd -DSTATUS -f /etc/httpd/conf/httpd.conf
[oresama@sorachi ~]$ /sbin/ifconfig
eth0 Link encap:Ethernet HWaddr 00:90:CC:E9:30:AB
inet addr:192.168.0.101 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::290:ccff:fee9:30ab/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:47609 errors:0 dropped:0 overruns:0 frame:0
TX packets:50473 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:11591250 (11.0 MiB) TX bytes:24177872 (23.0 MiB)
Interrupt:193 Base address:0xa000
eth0:0 Link encap:Ethernet HWaddr 00:90:CC:E9:30:AB
inet addr:192.168.0.200 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:193 Base address:0xa000
eth1 Link encap:Ethernet HWaddr 00:C0:9F:1A:3C:F2
inet addr:192.168.1.101 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::2c0:9fff:fe1a:3cf2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8757 errors:0 dropped:0 overruns:0 frame:0
TX packets:8879 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:2555439 (2.4 MiB) TX bytes:2625068 (2.5 MiB)
Base address:0xecc0 Memory:fe100000-fe120000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:18876 errors:0 dropped:0 overruns:0 frame:0
TX packets:18876 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4157055 (3.9 MiB) TX bytes:4157055 (3.9 MiB)
【httpdが死んでいるishikari】
[oresama@ishikari ~]$ ps auxwww | grep [h]eartbeat
root 14050 0.0 0.5 12076 12076 ? SLs 06:53 0:00 heartbeat: master control process
nobody 14053 0.0 0.2 5480 5480 ? SL 06:53 0:00 heartbeat: FIFO reader
nobody 14054 0.0 0.2 5476 5476 ? SL 06:53 0:00 heartbeat: write: ucast eth1
nobody 14055 0.0 0.2 5476 5476 ? SL 06:53 0:00 heartbeat: read: ucast eth1
498 14058 0.0 0.0 4928 2008 ? S 06:53 0:00 /usr/lib/heartbeat/ccm
498 14059 0.2 0.1 6628 2936 ? S 06:53 0:03 /usr/lib/heartbeat/cib
root 14060 0.0 0.0 4896 1880 ? S 06:53 0:00 /usr/lib/heartbeat/lrmd -r
nobody 14061 0.0 0.2 4624 4624 ? SL 06:53 0:00 /usr/lib/heartbeat/stonithd
498 14062 0.0 0.0 5188 1820 ? S 06:53 0:00 /usr/lib/heartbeat/attrd
498 14063 0.0 0.1 5624 2668 ? S 06:53 0:00 /usr/lib/heartbeat/crmd
root 14064 0.0 0.0 5924 1912 ? S 06:53 0:00 /usr/lib/heartbeat/mgmtd -v
root 14065 0.0 0.0 4544 1336 ? S 06:53 0:00 /usr/lib/heartbeat/pingd -m 100 -d 5s -a default_ping_set
498 15217 0.0 0.1 5132 2124 ? S 06:55 0:00 /usr/lib/heartbeat/tengine
498 15218 0.0 0.1 5760 2380 ? S 06:55 0:00 /usr/lib/heartbeat/pengine
[oresama@ishikari ~]$ ps auxwww | grep [h]ttpd
[oresama@ishikari ~]$ /sbin/ifconfig
eth0 Link encap:Ethernet HWaddr 00:90:CC:E9:2D:DD
inet addr:192.168.0.100 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::290:ccff:fee9:2ddd/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:45991 errors:0 dropped:0 overruns:0 frame:0
TX packets:51372 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:11094384 (10.5 MiB) TX bytes:15222245 (14.5 MiB)
Interrupt:201 Base address:0xc000
eth1 Link encap:Ethernet HWaddr 00:C0:9F:1A:3C:2D
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::2c0:9fff:fe1a:3c2d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8820 errors:0 dropped:0 overruns:0 frame:0
TX packets:8785 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:2631005 (2.5 MiB) TX bytes:2542771 (2.4 MiB)
Base address:0xecc0 Memory:fe100000-fe120000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:18799 errors:0 dropped:0 overruns:0 frame:0
TX packets:18799 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4120744 (3.9 MiB) TX bytes:4120744 (3.9 MiB)
これで切替の基本動作はOK。sorachiのネットワークケーブルを抜いてから3秒で検知し、その後3秒でapacheが切り替わり、sorachiのネットワーク復旧は5秒で検知し、その後apacheは5秒で切り替わりました。都合6秒で切り替わり、復旧は都合10秒。
ね、簡単でしょ?
通常、apacheを何も考えずにインストールすると、preforkで動作します。小規模サイトであればそのままでも構わないのですが、大規模サイトでスレッドによる処理の引渡しが要件に入ってくると、workerで適切なパラメータを投入して動かしたほうがパフォーマンスがよくなります。
※ ただしマシンスペックが低いとあんまり恩恵にあずかれないかも・・・
ちなみに、rpmからインストールしたapacheの動作をpreforkからworkerに変えるのは簡単。
/etc/sysconfig/httpd ファイルの
#HTTPD=/usr/sbin/httpd.worker ← ココのコメントを外し、apacheを再起動するだけ。
しかし問題が1つあって、CentOS付属のPHPはスレッドによる処理の引渡に対応していないので、どノーマルなhttpdとphpをインストールした後にworkerで動作させようとすると、apacheの起動時に以下のようなエラーを吐くのです。。。対処法はココを参考にしました。
$ sudo /etc/init.d/httpd start
Starting httpd: [Fri Jan 02 18:13:43 2009] [crit] Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP.
Pre-configuration failed
[FAILED]
■■ PHPのソースRPM入手とインストール
■ ソースRPMの入手
CentOSのミラーサイトには、大抵SRPMのディレクトリがあります。今回は理研さまのサイトからもってきました。
[oresama@sorachi ~]$ wget http://ftp.riken.jp/Linux/centos/5/os/SRPMS/php-5.1.6-20.el5.src.rpm
■ ソースrpmを展開する
[oresama@sorachi ~]$ rpm -ivh php-5.1.6-20.el5.src.rpm
■ SPECファイルを編集する
[oresama@sorachi ~]$ cd rpm/SPECS/
[oresama@sorachi SPECS]$ cp -p php.spec php.spec.orig
[oresama@sorachi SPECS]$ vi php.spec
ここを
%configure \
--cache-file=../config.cache \
・・・
こうする
%configure \
--with-tsm-pthreads \
--enable-maintainer-zts \
--cache-file=../config.cache \
tsm-pthreadsとmaintainer-ztsを有効にしてやるってことです。
■ 必要なパッケージをインストールする
その他、configureオプションを意図的に削除しない限りは、最低限以下のパッケージが必要になります。
apr-devel apr-util-devel aspell-devel autoconf automake beecrypt-devel bzip2-devel curl-devel cyrus-sasl-devel db4-devel e2fsprogs-devel elfutils-devel elfutils-devel-static elfutils-libelf-devel elfutils-libelf-devel-static expat-devel fontconfig-devel freetype-devel gcc-c++ gd gd-devel gmp-devel httpd-devel imake keyutils-libs-devel krb5-devel libc-client libc-client-devel libgcrypt-devel libgpg-error-devel libidn-devel libjpeg-devel libpng-devel libselinux-devel libsepol-devel libstdc++-devel libtool libX11-devel libXau-devel libXdmcp-devel libxml2-devel libXpm libXpm-devel libxslt libxslt-devel lm_sensors mesa-libGL-devel mysql mysql-devel ncurses-devel net-snmp net-snmp-devel net-snmp-libs openldap-devel openssl-devel pam-devel pcre-devel perl-DBI pkgconfig postgresql postgresql-devel rpm-devel sqlite-devel unixODBC unixODBC-devel xorg-x11-proto-devel zlib-devel
■ rpmbuildコマンドでビルドする
[oresama@sorachi SPECS]$ rpmbuild -bb php.spec
■ パッケージをインストールする
[oresama@sorachi SPECS]$ cd ../RPMS/i386
[oresama@sorachi i386]$ rpm --test -ivh php-5.1.6-20.i386.rpm php-cli-5.1.6-20.i386.rpm php-common-5.1.6-20.i386.rpm
[oresama@sorachi i386]$ sudo rpm -ivh php-5.1.6-20.i386.rpm php-cli-5.1.6-20.i386.rpm php-common-5.1.6-20.i386.rpm
■ apacheを再起動して反映
[oresama@sorachi i386]$ sudo /etc/init.d/httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
※ yumでパッケージをアップデートする際に、phpの上書きインストールがされないよう、yum.confでexcludeしましょう。
[oresama@sorachi ~]$ cd /etc/
[oresama@sorachi etc]$ sudo cp -p yum.conf yum.conf.orig
[oresama@sorachi etc]$ sudo vi yum.conf
この行を追加
exclude=php*
あとは、phpのテストページが正常に表示されればOKです。
ね、簡単でしょ?
※ ただしマシンスペックが低いとあんまり恩恵にあずかれないかも・・・
ちなみに、rpmからインストールしたapacheの動作をpreforkからworkerに変えるのは簡単。
/etc/sysconfig/httpd ファイルの
#HTTPD=/usr/sbin/httpd.worker ← ココのコメントを外し、apacheを再起動するだけ。
しかし問題が1つあって、CentOS付属のPHPはスレッドによる処理の引渡に対応していないので、どノーマルなhttpdとphpをインストールした後にworkerで動作させようとすると、apacheの起動時に以下のようなエラーを吐くのです。。。対処法はココを参考にしました。
$ sudo /etc/init.d/httpd start
Starting httpd: [Fri Jan 02 18:13:43 2009] [crit] Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe. You need to recompile PHP.
Pre-configuration failed
[FAILED]
■■ PHPのソースRPM入手とインストール
■ ソースRPMの入手
CentOSのミラーサイトには、大抵SRPMのディレクトリがあります。今回は理研さまのサイトからもってきました。
[oresama@sorachi ~]$ wget http://ftp.riken.jp/Linux/centos/5/os/SRPMS/php-5.1.6-20.el5.src.rpm
■ ソースrpmを展開する
[oresama@sorachi ~]$ rpm -ivh php-5.1.6-20.el5.src.rpm
■ SPECファイルを編集する
[oresama@sorachi ~]$ cd rpm/SPECS/
[oresama@sorachi SPECS]$ cp -p php.spec php.spec.orig
[oresama@sorachi SPECS]$ vi php.spec
ここを
%configure \
--cache-file=../config.cache \
・・・
こうする
%configure \
--with-tsm-pthreads \
--enable-maintainer-zts \
--cache-file=../config.cache \
tsm-pthreadsとmaintainer-ztsを有効にしてやるってことです。
■ 必要なパッケージをインストールする
その他、configureオプションを意図的に削除しない限りは、最低限以下のパッケージが必要になります。
apr-devel apr-util-devel aspell-devel autoconf automake beecrypt-devel bzip2-devel curl-devel cyrus-sasl-devel db4-devel e2fsprogs-devel elfutils-devel elfutils-devel-static elfutils-libelf-devel elfutils-libelf-devel-static expat-devel fontconfig-devel freetype-devel gcc-c++ gd gd-devel gmp-devel httpd-devel imake keyutils-libs-devel krb5-devel libc-client libc-client-devel libgcrypt-devel libgpg-error-devel libidn-devel libjpeg-devel libpng-devel libselinux-devel libsepol-devel libstdc++-devel libtool libX11-devel libXau-devel libXdmcp-devel libxml2-devel libXpm libXpm-devel libxslt libxslt-devel lm_sensors mesa-libGL-devel mysql mysql-devel ncurses-devel net-snmp net-snmp-devel net-snmp-libs openldap-devel openssl-devel pam-devel pcre-devel perl-DBI pkgconfig postgresql postgresql-devel rpm-devel sqlite-devel unixODBC unixODBC-devel xorg-x11-proto-devel zlib-devel
■ rpmbuildコマンドでビルドする
[oresama@sorachi SPECS]$ rpmbuild -bb php.spec
■ パッケージをインストールする
[oresama@sorachi SPECS]$ cd ../RPMS/i386
[oresama@sorachi i386]$ rpm --test -ivh php-5.1.6-20.i386.rpm php-cli-5.1.6-20.i386.rpm php-common-5.1.6-20.i386.rpm
[oresama@sorachi i386]$ sudo rpm -ivh php-5.1.6-20.i386.rpm php-cli-5.1.6-20.i386.rpm php-common-5.1.6-20.i386.rpm
■ apacheを再起動して反映
[oresama@sorachi i386]$ sudo /etc/init.d/httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
※ yumでパッケージをアップデートする際に、phpの上書きインストールがされないよう、yum.confでexcludeしましょう。
[oresama@sorachi ~]$ cd /etc/
[oresama@sorachi etc]$ sudo cp -p yum.conf yum.conf.orig
[oresama@sorachi etc]$ sudo vi yum.conf
この行を追加
exclude=php*
あとは、phpのテストページが正常に表示されればOKです。
ね、簡単でしょ?
某所にてApacheをインストールした際、最新のバージョンが使いたいという要件からrpmからではなくソースからインストールしました。ある程度の規模のアクセスを見込んでいたので、rotatelogsを使って、apacheのプロセスを再起動することなくログのローテーションをすることにしたのですが・・・
(;´Д`) 1日のアクセスログが5GBって何?
予想以上のアクセス数で、/usrパーティションが1週間もしないうちに枯渇してしまうであろうことは容易に想像できたので、とりあえずはlatestなログ以外は全部gzip圧縮してしまおう!と思ったのです。
・ 仕様
apacheのアクセスログとエラーログのうち、昨日データが修正されたもので、かつまだ圧縮されていないものを検索し、gzip圧縮する
# cd /root/bin
# touch logcompress.sh
# chmod 755 logcompress.sh
# vi logcompress.sh
~~~~~~~~ ここから記述 ~~~~~~~~
#!/bin/sh
LANG=C
cd /usr/local/apache2/logs
for i in `find . -name '*_log*' -mtime 1 | grep -iv gz`
do
gzip $i
done
~~~~~~~~ ここまでです ~~~~~~~~
ちなみに、rotatelogsってなんで朝9時に実行されるんだろ?って思ってヘルプを見てみたら
$ /usr/local/apache2/bin/rotatelogs --help
Incorrect number of arguments
Usage: /usr/local/apache2/bin/rotatelogs [-l] [-f] <logfile> {<rotation time in seconds>|<rotation size in megabytes>} [offset minutes from UTC]
Add this:
TransferLog "|/usr/local/apache2/bin/rotatelogs /some/where 86400"
or
TransferLog "|/usr/local/apache2/bin/rotatelogs /some/where 5M"
to httpd.conf. The generated name will be /some/where.nnnn where nnnn is the
system time at which the log nominally starts (N.B. if using a rotation time,
the time will always be a multiple of the rotation time, so you can synchronize
cron scripts with it). At the end of each rotation time or when the file size
is reached a new log is started.
当たり前ですがUTCで0時に実行されるんですね(^_^;
なので、さっき作ったlogcompress.shは、毎日9時より数分後にcronで実行するようにしています。これによって、生ログで5GB近くあったものが300MB程度に圧縮されました。わーい。
(;´Д`) 1日のアクセスログが5GBって何?
予想以上のアクセス数で、/usrパーティションが1週間もしないうちに枯渇してしまうであろうことは容易に想像できたので、とりあえずはlatestなログ以外は全部gzip圧縮してしまおう!と思ったのです。
・ 仕様
apacheのアクセスログとエラーログのうち、昨日データが修正されたもので、かつまだ圧縮されていないものを検索し、gzip圧縮する
# cd /root/bin
# touch logcompress.sh
# chmod 755 logcompress.sh
# vi logcompress.sh
~~~~~~~~ ここから記述 ~~~~~~~~
#!/bin/sh
LANG=C
cd /usr/local/apache2/logs
for i in `find . -name '*_log*' -mtime 1 | grep -iv gz`
do
gzip $i
done
~~~~~~~~ ここまでです ~~~~~~~~
ちなみに、rotatelogsってなんで朝9時に実行されるんだろ?って思ってヘルプを見てみたら
$ /usr/local/apache2/bin/rotatelogs --help
Incorrect number of arguments
Usage: /usr/local/apache2/bin/rotatelogs [-l] [-f] <logfile> {<rotation time in seconds>|<rotation size in megabytes>} [offset minutes from UTC]
Add this:
TransferLog "|/usr/local/apache2/bin/rotatelogs /some/where 86400"
or
TransferLog "|/usr/local/apache2/bin/rotatelogs /some/where 5M"
to httpd.conf. The generated name will be /some/where.nnnn where nnnn is the
system time at which the log nominally starts (N.B. if using a rotation time,
the time will always be a multiple of the rotation time, so you can synchronize
cron scripts with it). At the end of each rotation time or when the file size
is reached a new log is started.
当たり前ですがUTCで0時に実行されるんですね(^_^;
なので、さっき作ったlogcompress.shは、毎日9時より数分後にcronで実行するようにしています。これによって、生ログで5GB近くあったものが300MB程度に圧縮されました。わーい。
ntopとは、各種プロトコルの情報やホストごとの送受信パケット数/データ量やスループットの他、トラフィックの時間経過グラフ、ホスト間の通信データ量などをブラウザでわかりやすく表示してくれるソフトです。コンソールからも使えるようですが、目に見えてわかりやすいのは、ブラウザに表示されるグラフでしょう。
インストール後の設定については、
http://www.geocities.jp/i_catnap/Diary/Diary-0404.html
を参考にしました。
ただインストールしても動くのですが、LAN内を流れるパケットをモニターする関係上、誰にでもグラフを見せていいか?・・・となると、ちょっと疑問が残ります。ntopそのものはユーザによるアクセス制限(見せたいデータの権限を指定)がありますが、ntopへのそもそものアクセスを、限られたユーザだけにしたいなー・・・という思いもあったりします。なので、
ntopを動かす(待ち受ける)インターフェイスはeth0
ntopにアクセスできるノードはeth0の属するサブネット(192.168.0.0/24)のみ
ntopの画面にはiptablesを使って直アクセスさせず、一度apacheのmod_proxyを介して、ベーシック認証を通過させる
ユーザがntopの画面を見るまでには、以下のステップを踏むことになります。
[パソコンのブラウザ] → [apache (ベーシック認証、mod_proxyによるリバースプロキシ)] → [ntop]
また、ユーザは http://192.168.0.3/ にアクセスしてユーザ名とパスワードを聞かれることを意識するくらいで使うことができますし、使わせる側としても、不必要に裏側でどう動いているかを見せなくてすむというメリットがあります。
■■ インストール
インストールした環境は以下のとおりです。
----------------------------------------------------------------------------------------------------------------------------------------------------------------
sh-3.00$ hostname
intra1.example.com
sh-3.00$ cat /etc/redhat-release
CentOS release 4.6 (Final)
sh-3.00$ uname -a
Linux intra1.example.com 2.6.9-67.0.15.EL #1 Thu May 8 10:39:19 EDT 2008 i686 i686 i386 GNU/Linux
----------------------------------------------------------------------------------------------------------------------------------------------------------------
ntopのパッケージはrpmforgeリポジトリにあるので、ここからインストールします。
[root@intra1 ~]# yum --enablerepo=rpmforge install ntop
(中略)
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
ntop i386 3.3-1.el4.rf rpmforge 3.4 M
Installing for dependencies:
net-snmp-libs i386 5.1.2-11.el4_6.11.2 update 1.7 M
Transaction Summary
=============================================================================
Install 2 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 5.2 M
Is this ok [y/N]: y
■■ 設定
■ ntop.conf 編集
[root@intra1 ~]# cd /etc/
[root@intra1 etc]# cp -p ntop.conf ntop.conf.orig
[root@intra1 etc]# vi ntop.conf
・ ログの出力先を変更する
ここを
### Logging messages to syslog (instead of the console):
### NOTE: To log to a specific facility, use --use-syslog=local3
### NOTE: The = is REQUIRED and no spaces are permitted.
--use-syslog
こうする
### Logging messages to syslog (instead of the console):
### NOTE: To log to a specific facility, use --use-syslog=local3
### NOTE: The = is REQUIRED and no spaces are permitted.
#--use-syslog
--use-syslog=local3
※ syslogのファシリティに空きがあるかどうか(local3が使われていないか)を/etc/syslog.confを見て確認すること
・ ntopがローカルとみなすネットワークを設定する
ここを
### Sets the networks that ntop should consider as local.
### NOTE: Uses dotted decimal and CIDR notation. Example: 192.168.0.0/24
### The addresses of the interfaces are always local and don't need to be specified.
#--local-subnets xx.xx.xx.xx/yy
こうする
### Sets the networks that ntop should consider as local.
### NOTE: Uses dotted decimal and CIDR notation. Example: 192.168.0.0/24
### The addresses of the interfaces are always local and don't need to be specified.
#--local-subnets xx.xx.xx.xx/yy
--local-subnets 192.168.0.0/24
・ ntopをデーモンモードで動かす
ここを
### Sets program to run as a daemon
### NOTE: For more than casual use, you probably want this.
#--daemon
こうする
### Sets program to run as a daemon
### NOTE: For more than casual use, you probably want this.
#--daemon
--daemon
以上を確認して保存します。
■ スタートスクリプトの編集
/etc/init.d/ntopを編集して、eth0のIPアドレスでのみlistenするようにします。
まずはifconfigコマンドでeth0のIPアドレスを確認しましょう。
sh-3.00# ifconfig eth0 | grep "inet addr"
inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
eth0に割り当てられているIPアドレスは192.168.0.3です。
sh-3.00# cd /etc/init.d
sh-3.00# cp -p ntop ntop.orig
sh-3.00# vi ntop
ここを
start () {
echo -n $"Starting $prog: "
daemon $prog -d -L @/etc/ntop.conf
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/\$prog
return $RETVAL
}
こうする
start () {
echo -n $"Starting $prog: "
#daemon $prog -d -L @/etc/ntop.conf
daemon $prog -d -w 192.168.0.3:3000 -L @/etc/ntop.conf
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/\$prog
return $RETVAL
}
スタートスクリプトからntopを起動するときのオプションは以下のとおりです。
-d = デーモンモードとして動かす
-w 192.168.0.3:3000 = IPアドレス192.168.0.3のポート3000番で待ち受ける
-L = 標準出力のかわりにsyslogへメッセージを送る
@/etc/ntop.conf = /etc/ntop.conf を設定ファイルとする
■ syslog.conf編集
[root@intra1 etc]# cp -p syslog.conf syslog.conf.20080616
[root@intra1 etc]# vi syslog.conf
ここを
*.info;mail.none;authpriv.none;cron.none;local1.none /var/log/messages
こうする
#*.info;mail.none;authpriv.none;cron.none;local1.none /var/log/messages
*.info;mail.none;authpriv.none;cron.none;local1.none;local3.none /var/log/messages
そして下記を追加する
local3.* /var/log/ntoplog
■■ syslogdをreloadする
[root@intra1 etc]# /etc/init.d/syslog reload
Shutting down kernel logger: [ OK ]
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
Starting kernel logger: [ OK ]
■■ ntopのログローテーション設定を行う
お好みでログローテーションの設定を変更します。
(っ´∀`)っ ゃー はログを読むためだけにrootになったりするのがイヤなので、
(っ´∀`)っ ゃーが普段使うユーザ「oresama」はwheelグループに入れています。
で、読みたいログはwheelグループに読み込みの権限を与えています。
[root@intra1 etc]# cd logrotate.d/
[root@intra1 logrotate.d]# vi ntop
ここを
/var/log/ntop.access.log {
missingok
postrotate
/sbin/service ntop condrestart >/dev/null 2>&1
endscript
}
こうする
/var/log/ntoplog {
daily
rotate 365
compress
ifempty
create 0640 root wheel
missingok
postrotate
/sbin/service ntop condrestart >/dev/null 2>&1
endscript
}
■■ 初期設定
ntopを最初に動かす前に、ntopの管理ユーザ「admin」のパスワードを設定します。
これは、ntopの細かい設定をブラウザから行うときに使います。
[root@intra1 logrotate.d]# cd
[root@intra1 ~]# /usr/bin/ntop
(しばらくログが流れた後)
ntop startup - waiting for user response!
Please enter the password for the admin user:
Please enter the password again:
というプロンプトが出るので、パスワードを入力し、しばらくしてからCtrl+Cで終了させます。
■■ 起動
■ スタートスクリプトからの起動
[root@intra1 ~]# /etc/init.d/ntop start
Starting ntop: [ OK ]
[root@intra1 ~]# /etc/init.d/ntop status
ntop (pid 559) is running...
■ 自動起動設定
[root@intra1 ~]# chkconfig ntop --list
ntop 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@intra1 ~]# chkconfig ntop on
[root@intra1 ~]# chkconfig ntop --list
ntop 0:off 1:off 2:on 3:on 4:on 5:on 6:off
■■ ブラウザから見てみる
http://192.168.0.3:3000/
グラフはあっさり表示されます。
ユーザ名:admin
パスワード:(さっき指定したやつ)
■■ ベーシック認証を使えるようにする
ntopの認証機能は、画面の一部を見せたり見せなかったりするようですが、
そもそもグラフそのものにアクセスさせたくないっていう場合には、
次の仕組みを使うことによってベーシック認証を実現することができます。
1) 192.168.0.3 をntop専用のバーチャルホストとして、一度apacheで接続を待ち受け、apacheのリバースプロキシを使ってntopへ要求を投げる
2) iptablesでポート3000番をlocalhostにだけ許可する
3) ベーシック認証をかける
■ 1 apacheで192.168.0.3をntop専用のバーチャルホスト設定する
apacheでmod_proxyが使えるかどうか、以下の記述がhttpd.confにあるか確認してください。
LoadModule proxy_module modules/mod_proxy.so
それでは設定です。
sh-3.00# cd /etc/httpd/conf.d
sh-3.00# vi ntop.conf
NameVirtualHost 192.168.0.3:80
<VirtualHost 192.168.0.3:80>
# サーバー名の指定をする
ServerName intra1.example.com
# エラーログの定義
ErrorLog /home/oresama/logs/intra1_error.log
# アクセスログの定義
CustomLog /home/oresama/logs/intra1_access.log combined
# フォワードプロキシをoffにする
ProxyRequests Off
# リモートサーバをローカルサーバのURL空間にマップする。
# ここでは、/にアクセスすると、http://192.168.0.3:3000/にマップする。
ProxyPass / http://192.168.0.3:3000/
<Location />
# ベーシック認証に使うファイルを定義する
AuthUserFile /home/oresama/auth/.htpasswd
AuthGroupFile /dev/null
AuthName "User Admin"
AuthType Basic
require valid-user
# 外部からの接続を拒絶し、LAN内からのアクセスのみ許可する
Order deny,allow
Deny from all
Allow from 192.168.0.0/24
</Location>
</VirtualHost>
■ 設定反映
sh-3.00# apachectl configtest
sh-3.00# apachectl graceful
■ iptablesでポート3000番をlocalhostだけにする
sh-3.00# iptables -L -n | grep 3000
ACCEPT tcp -- 127.0.0.1 0.0.0.0/0 tcp dpt:3000
■ ベーシック認証をかける
sh-3.00# htpasswd -c /home/oresama/auth/.htpasswd oresama
New password:
Re-type new password:
Adding password for user oresama
sh-3.00# cat /home/oresama/auth/.htpasswd
oresama:n8H0Vb.JKkuRA
■ 確認
http://192.168.0.3/
にアクセスして、ベーシック認証がかかること
http://192.168.0.3:3000/
にアクセスして、接続ができないこと
以上で、LAN内を流れるパケットをモニターすることができました。
ね、簡単でしょ?
インストール後の設定については、
http://www.geocities.jp/i_catnap/Diary/Diary-0404.html
を参考にしました。
ただインストールしても動くのですが、LAN内を流れるパケットをモニターする関係上、誰にでもグラフを見せていいか?・・・となると、ちょっと疑問が残ります。ntopそのものはユーザによるアクセス制限(見せたいデータの権限を指定)がありますが、ntopへのそもそものアクセスを、限られたユーザだけにしたいなー・・・という思いもあったりします。なので、
ntopを動かす(待ち受ける)インターフェイスはeth0
ntopにアクセスできるノードはeth0の属するサブネット(192.168.0.0/24)のみ
ntopの画面にはiptablesを使って直アクセスさせず、一度apacheのmod_proxyを介して、ベーシック認証を通過させる
ユーザがntopの画面を見るまでには、以下のステップを踏むことになります。
[パソコンのブラウザ] → [apache (ベーシック認証、mod_proxyによるリバースプロキシ)] → [ntop]
また、ユーザは http://192.168.0.3/ にアクセスしてユーザ名とパスワードを聞かれることを意識するくらいで使うことができますし、使わせる側としても、不必要に裏側でどう動いているかを見せなくてすむというメリットがあります。
■■ インストール
インストールした環境は以下のとおりです。
----------------------------------------------------------------------------------------------------------------------------------------------------------------
sh-3.00$ hostname
intra1.example.com
sh-3.00$ cat /etc/redhat-release
CentOS release 4.6 (Final)
sh-3.00$ uname -a
Linux intra1.example.com 2.6.9-67.0.15.EL #1 Thu May 8 10:39:19 EDT 2008 i686 i686 i386 GNU/Linux
----------------------------------------------------------------------------------------------------------------------------------------------------------------
ntopのパッケージはrpmforgeリポジトリにあるので、ここからインストールします。
[root@intra1 ~]# yum --enablerepo=rpmforge install ntop
(中略)
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
ntop i386 3.3-1.el4.rf rpmforge 3.4 M
Installing for dependencies:
net-snmp-libs i386 5.1.2-11.el4_6.11.2 update 1.7 M
Transaction Summary
=============================================================================
Install 2 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 5.2 M
Is this ok [y/N]: y
■■ 設定
■ ntop.conf 編集
[root@intra1 ~]# cd /etc/
[root@intra1 etc]# cp -p ntop.conf ntop.conf.orig
[root@intra1 etc]# vi ntop.conf
・ ログの出力先を変更する
ここを
### Logging messages to syslog (instead of the console):
### NOTE: To log to a specific facility, use --use-syslog=local3
### NOTE: The = is REQUIRED and no spaces are permitted.
--use-syslog
こうする
### Logging messages to syslog (instead of the console):
### NOTE: To log to a specific facility, use --use-syslog=local3
### NOTE: The = is REQUIRED and no spaces are permitted.
#--use-syslog
--use-syslog=local3
※ syslogのファシリティに空きがあるかどうか(local3が使われていないか)を/etc/syslog.confを見て確認すること
・ ntopがローカルとみなすネットワークを設定する
ここを
### Sets the networks that ntop should consider as local.
### NOTE: Uses dotted decimal and CIDR notation. Example: 192.168.0.0/24
### The addresses of the interfaces are always local and don't need to be specified.
#--local-subnets xx.xx.xx.xx/yy
こうする
### Sets the networks that ntop should consider as local.
### NOTE: Uses dotted decimal and CIDR notation. Example: 192.168.0.0/24
### The addresses of the interfaces are always local and don't need to be specified.
#--local-subnets xx.xx.xx.xx/yy
--local-subnets 192.168.0.0/24
・ ntopをデーモンモードで動かす
ここを
### Sets program to run as a daemon
### NOTE: For more than casual use, you probably want this.
#--daemon
こうする
### Sets program to run as a daemon
### NOTE: For more than casual use, you probably want this.
#--daemon
--daemon
以上を確認して保存します。
■ スタートスクリプトの編集
/etc/init.d/ntopを編集して、eth0のIPアドレスでのみlistenするようにします。
まずはifconfigコマンドでeth0のIPアドレスを確認しましょう。
sh-3.00# ifconfig eth0 | grep "inet addr"
inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
eth0に割り当てられているIPアドレスは192.168.0.3です。
sh-3.00# cd /etc/init.d
sh-3.00# cp -p ntop ntop.orig
sh-3.00# vi ntop
ここを
start () {
echo -n $"Starting $prog: "
daemon $prog -d -L @/etc/ntop.conf
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/\$prog
return $RETVAL
}
こうする
start () {
echo -n $"Starting $prog: "
#daemon $prog -d -L @/etc/ntop.conf
daemon $prog -d -w 192.168.0.3:3000 -L @/etc/ntop.conf
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/\$prog
return $RETVAL
}
スタートスクリプトからntopを起動するときのオプションは以下のとおりです。
-d = デーモンモードとして動かす
-w 192.168.0.3:3000 = IPアドレス192.168.0.3のポート3000番で待ち受ける
-L = 標準出力のかわりにsyslogへメッセージを送る
@/etc/ntop.conf = /etc/ntop.conf を設定ファイルとする
■ syslog.conf編集
[root@intra1 etc]# cp -p syslog.conf syslog.conf.20080616
[root@intra1 etc]# vi syslog.conf
ここを
*.info;mail.none;authpriv.none;cron.none;local1.none /var/log/messages
こうする
#*.info;mail.none;authpriv.none;cron.none;local1.none /var/log/messages
*.info;mail.none;authpriv.none;cron.none;local1.none;local3.none /var/log/messages
そして下記を追加する
local3.* /var/log/ntoplog
■■ syslogdをreloadする
[root@intra1 etc]# /etc/init.d/syslog reload
Shutting down kernel logger: [ OK ]
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
Starting kernel logger: [ OK ]
■■ ntopのログローテーション設定を行う
お好みでログローテーションの設定を変更します。
(っ´∀`)っ ゃー はログを読むためだけにrootになったりするのがイヤなので、
(っ´∀`)っ ゃーが普段使うユーザ「oresama」はwheelグループに入れています。
で、読みたいログはwheelグループに読み込みの権限を与えています。
[root@intra1 etc]# cd logrotate.d/
[root@intra1 logrotate.d]# vi ntop
ここを
/var/log/ntop.access.log {
missingok
postrotate
/sbin/service ntop condrestart >/dev/null 2>&1
endscript
}
こうする
/var/log/ntoplog {
daily
rotate 365
compress
ifempty
create 0640 root wheel
missingok
postrotate
/sbin/service ntop condrestart >/dev/null 2>&1
endscript
}
■■ 初期設定
ntopを最初に動かす前に、ntopの管理ユーザ「admin」のパスワードを設定します。
これは、ntopの細かい設定をブラウザから行うときに使います。
[root@intra1 logrotate.d]# cd
[root@intra1 ~]# /usr/bin/ntop
(しばらくログが流れた後)
ntop startup - waiting for user response!
Please enter the password for the admin user:
Please enter the password again:
というプロンプトが出るので、パスワードを入力し、しばらくしてからCtrl+Cで終了させます。
■■ 起動
■ スタートスクリプトからの起動
[root@intra1 ~]# /etc/init.d/ntop start
Starting ntop: [ OK ]
[root@intra1 ~]# /etc/init.d/ntop status
ntop (pid 559) is running...
■ 自動起動設定
[root@intra1 ~]# chkconfig ntop --list
ntop 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@intra1 ~]# chkconfig ntop on
[root@intra1 ~]# chkconfig ntop --list
ntop 0:off 1:off 2:on 3:on 4:on 5:on 6:off
■■ ブラウザから見てみる
http://192.168.0.3:3000/
グラフはあっさり表示されます。
ユーザ名:admin
パスワード:(さっき指定したやつ)
■■ ベーシック認証を使えるようにする
ntopの認証機能は、画面の一部を見せたり見せなかったりするようですが、
そもそもグラフそのものにアクセスさせたくないっていう場合には、
次の仕組みを使うことによってベーシック認証を実現することができます。
1) 192.168.0.3 をntop専用のバーチャルホストとして、一度apacheで接続を待ち受け、apacheのリバースプロキシを使ってntopへ要求を投げる
2) iptablesでポート3000番をlocalhostにだけ許可する
3) ベーシック認証をかける
■ 1 apacheで192.168.0.3をntop専用のバーチャルホスト設定する
apacheでmod_proxyが使えるかどうか、以下の記述がhttpd.confにあるか確認してください。
LoadModule proxy_module modules/mod_proxy.so
それでは設定です。
sh-3.00# cd /etc/httpd/conf.d
sh-3.00# vi ntop.conf
NameVirtualHost 192.168.0.3:80
<VirtualHost 192.168.0.3:80>
# サーバー名の指定をする
ServerName intra1.example.com
# エラーログの定義
ErrorLog /home/oresama/logs/intra1_error.log
# アクセスログの定義
CustomLog /home/oresama/logs/intra1_access.log combined
# フォワードプロキシをoffにする
ProxyRequests Off
# リモートサーバをローカルサーバのURL空間にマップする。
# ここでは、/にアクセスすると、http://192.168.0.3:3000/にマップする。
ProxyPass / http://192.168.0.3:3000/
<Location />
# ベーシック認証に使うファイルを定義する
AuthUserFile /home/oresama/auth/.htpasswd
AuthGroupFile /dev/null
AuthName "User Admin"
AuthType Basic
require valid-user
# 外部からの接続を拒絶し、LAN内からのアクセスのみ許可する
Order deny,allow
Deny from all
Allow from 192.168.0.0/24
</Location>
</VirtualHost>
■ 設定反映
sh-3.00# apachectl configtest
sh-3.00# apachectl graceful
■ iptablesでポート3000番をlocalhostだけにする
sh-3.00# iptables -L -n | grep 3000
ACCEPT tcp -- 127.0.0.1 0.0.0.0/0 tcp dpt:3000
■ ベーシック認証をかける
sh-3.00# htpasswd -c /home/oresama/auth/.htpasswd oresama
New password:
Re-type new password:
Adding password for user oresama
sh-3.00# cat /home/oresama/auth/.htpasswd
oresama:n8H0Vb.JKkuRA
■ 確認
http://192.168.0.3/
にアクセスして、ベーシック認証がかかること
http://192.168.0.3:3000/
にアクセスして、接続ができないこと
以上で、LAN内を流れるパケットをモニターすることができました。
ね、簡単でしょ?
B○G IPとか買うお金がなく、NIC追加したりするためのサーバ停止する機会すらなく、30分でロードバランサを構築したい場合、poundでリバースプロキシを構築すると便利です。
■■ やりたいこと
1台のリバースプロキシを、httpやhttpsアクセスの矢面に立たせる
バックエンドには、2台のhttpサーバがあり、それぞれhttpd.confベタ書きかIPベースのバーチャルホストを構築する
このコンテンツのために構築したサーバは以下の通りです。
リバースプロキシ:www.example.com 192.168.0.4 (CentOS4.6)
httpサーバ1:be1.example.com 192.168.0.120 (CentOS5.1)
httpサーバ2:be2.example.com 192.168.0.121 (CentOS5.1)
なお、www.example.comでapacheが動いている場合、192.168.0.4でhttpとhttpsをlistenしないようにします。
httpd.confで
Listen 80
となっているところを
Listen 192.168.0.3:80
のように、192.168.0.4以外のIPアドレスでlistenするようにします。
ssl.confでも、
Listen 443
となっているところを
Listen 192.168.0.3:443
とします。
■■ poundのインストール
※ ソースRPMをダウンロードして自分でビルドしてRPMパッケージを作るので、あらかじめrpm-buildをインストールし、ホームディレクトリ以下に.rpmmacrosファイルとrpm/{BUILD,RPMS,SOURCES,SPECS,SRPMS}ディレクトリを作成しておいてください。
poundの公式サイトから、パッケージをダウンロードしてきます。
ブラウザをちょっとだけスクロールすると、
・ RPMs for RedHat are available at http://www.invoca.ch/pub/packages/pound/
という文字列が見えるので、右クリックしてリンク先のURLをコピーします。
ターミナルから
$ wget http://www.invoca.ch/pub/packages/pound/pound-2.4.2-1.src.rpm
で、SRPMパッケージをダウンロードしてきます。なお、これは執筆時点での最新バージョンです。
次に、ダウンロードしてきたSRPMファイルを展開します。
$ rpm -ivh pound-2.4.2-1.src.rpm
SPECファイルを確認します。
$ cd rpm/SPECS/
$ less pound.spec
(中略)
BuildRequires: openssl-devel, pkgconfig, pcre-devel, google-perftools-devel
BuildRequires: sed, perl
と書いてあるので、openssl-devel、pkgconfig、pcre-devel、google-perftools-devel、sed、perlがインストールされているか確認します。
sedとperlは、恐らくほとんどの環境ではインストールされていると思います。
openssl-devel、pkgconfig、pcre-develはbaseリポジトリにあるので、何のオプションもなしにyumコマンドでインストールできるはずです。
google-perftools-devel は、RPM Searchから探して持って来ました。なお、google-perftools-develをインストールするには、google-perftoolsも必要になります。
$ wget ftp://ftp.pbone.net/mirror/download.fedora.redhat.com/pub/fedora/epel/4/i386/google-perftools-devel-0.92-1.el4.2.i386.rpm
(↑2行に見えますが実際は1行です)
$ wget ftp://ftp.pbone.net/mirror/download.fedora.redhat.com/pub/fedora/epel/4/i386/google-perftools-0.92-1.el4.2.i386.rpm
(↑2行に見えますが実際は1行です)
$ rpm --test -ivh google-perftools-0.92-1.el4.2.i386.rpm google-perftools-devel-0.92-1.el4.2.i386.rpm
$ su -
# rpm -ivh google-perftools-0.92-1.el4.2.i386.rpm google-perftools-devel-0.92-1.el4.2.i386.rpm
# exit
続いて、一般ユーザ「oresama」に戻ってからpoundのRPMをビルドします。
$ cd ~/rpm/SPECS/
$ rpmbuild -ba pound.spec
ビルドが終わったら、poundの依存関係を確認します。
$ cd ../RPMS/i386/
$ rpm --test -ivh pound-2.4.2-1.i386.rpm
何も問題なければ、インストールを行います。
$ su -
# cd /home/oresama/rpm/RPMS/i386/
# rpm -ivh pound-2.4.2-1.i386.rpm
■■ pound.cfgを編集する
# cd /etc/pound
# cp -p pound.cfg pound.cfg.orig
# vi pound.cfg
User "nobody"
Group "nobody"
RootJail "/usr/share/pound"
Control "/var/run/pound/ctl_socket"
# Main listening ports
ListenHTTP
#Address 0.0.0.0
#poundで待ち受けるIPアドレスを指定する。
Address 192.168.0.4
Port 80
xHTTP 1
End
ListenHTTPS
#Address 0.0.0.0
#poundで待ち受けるIPアドレスを指定する。
Address 192.168.0.4
Port 443
#秘密鍵と証明書がひとまとめになったファイルを指定する。
Cert "/usr/share/ssl/certs/pound.pem"
Ciphers "ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL"
xHTTP 1
End
# Catch-all server(s)
Service
BackEnd
#バックエンドで動くサーバのIPアドレスを指定する。
Address 192.168.0.120
Port 80
#優先度を1から9で指定する。数字が大きいほど優先度が高くなる。
Priority 1
End
BackEnd
Address 192.168.0.121
Port 80
Priority 1
End
Session
#セッションの保持時間を秒単位で指定する。
#ベーシック認証のほか、クッキーなども指定できるようだ。
Type BASIC
TTL 300
End
End
設定ファイルはここまで。
■■ 証明書作成
# cd /usr/share/ssl/certs/
まずはpound.pemのバックアップを取ります。
# cp -p pound.pem pound.pem.orig
# echo -n "" > pound.pem
■ 秘密鍵の生成
# openssl genrsa -des3 -out server-key.pem 1024
■ CSRの生成
# openssl req -new -key server-key.pem -out server-csr.pem
■ 秘密鍵からパスフレーズを取り除く
# cp -p server-key.pem server-key.pem.orig
# openssl req -text -noout -in server-csr.pem
■ 証明書作成
# openssl x509 -in server-csr.pem -out server-crt.pem -req -signkey server-key.pem
■ 秘密鍵と証明書をひとつのファイルにまとめる
# cat server-key.pem > pound.pem
# cat server-crt.pem >> pound.pem
■■ 起動前の確認
poundを起動する前に、poundコマンドの引数に-cをつけて、設定の確認をします。
# pound -c
starting...
Config file /etc/pound/pound.cfg is OK
このように表示されたら、設定ファイルの書式はあっています。
設定ファイルの書式が間違っていると
# pound -c
starting...
line 7: unknown directive "ListenHTTTP " - aborted
というように、設定ファイルの行番号つきで「ここ間違ってるぞ」と教えてくれます。
また、Certファイルが壊れていても
# pound -c
starting...
line 17: SSL_CTX_use_certificate_chain_file "/usr/share/ssl/certs/pound.pem" failed - aborted
error:0906D064:PEM routines:PEM_read_bio:bad base64 decode
このようにエラーが出ます。
■■ pound起動
# /etc/init.d/pound start
Starting pound: [ OK ]
■■ pound自動起動設定
# chkconfig pound --list
pound 0:off 1:off 2:off 3:off 4:off 5:off 6:off
# chkconfig pound on
# chkconfig pound --list
pound 0:off 1:off 2:on 3:on 4:on 5:on 6:off
■■ テスト
2台あるバックエンドサーバのドキュメントルートに、ちょっとずつ内容の違うhtmlファイルを、同じファイル名(ここではindex.htmlとしましょう)でアップロードします。
http://192.168.0.4/
https://192.168.0.4/
にそれぞれアクセスし、何度かリロードして、違う表示が交互に出てきたら、正しく振り分けられています。勿論、規則正しく振り分けてくれるわけではありません。
■■ 運用
poundのログは、/var/log/messagesに出力されます。ここに、アクセスログが記録されます。
バックエンドにあるapacheのアクセスログのフォーマットはデフォルトで
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
と設定されていますが、この状態だと、poundが動いているサーバのIPアドレスが記録されてしまいます。なので、httpd.confの修正を行う必要があります。
ここを
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
こうする
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
以上で、ごくごく簡単なロードバランサができました。
ね、簡単でしょ?
■■ やりたいこと
1台のリバースプロキシを、httpやhttpsアクセスの矢面に立たせる
バックエンドには、2台のhttpサーバがあり、それぞれhttpd.confベタ書きかIPベースのバーチャルホストを構築する
このコンテンツのために構築したサーバは以下の通りです。
リバースプロキシ:www.example.com 192.168.0.4 (CentOS4.6)
httpサーバ1:be1.example.com 192.168.0.120 (CentOS5.1)
httpサーバ2:be2.example.com 192.168.0.121 (CentOS5.1)
なお、www.example.comでapacheが動いている場合、192.168.0.4でhttpとhttpsをlistenしないようにします。
httpd.confで
Listen 80
となっているところを
Listen 192.168.0.3:80
のように、192.168.0.4以外のIPアドレスでlistenするようにします。
ssl.confでも、
Listen 443
となっているところを
Listen 192.168.0.3:443
とします。
■■ poundのインストール
※ ソースRPMをダウンロードして自分でビルドしてRPMパッケージを作るので、あらかじめrpm-buildをインストールし、ホームディレクトリ以下に.rpmmacrosファイルとrpm/{BUILD,RPMS,SOURCES,SPECS,SRPMS}ディレクトリを作成しておいてください。
poundの公式サイトから、パッケージをダウンロードしてきます。
ブラウザをちょっとだけスクロールすると、
・ RPMs for RedHat are available at http://www.invoca.ch/pub/packages/pound/
という文字列が見えるので、右クリックしてリンク先のURLをコピーします。
ターミナルから
$ wget http://www.invoca.ch/pub/packages/pound/pound-2.4.2-1.src.rpm
で、SRPMパッケージをダウンロードしてきます。なお、これは執筆時点での最新バージョンです。
次に、ダウンロードしてきたSRPMファイルを展開します。
$ rpm -ivh pound-2.4.2-1.src.rpm
SPECファイルを確認します。
$ cd rpm/SPECS/
$ less pound.spec
(中略)
BuildRequires: openssl-devel, pkgconfig, pcre-devel, google-perftools-devel
BuildRequires: sed, perl
と書いてあるので、openssl-devel、pkgconfig、pcre-devel、google-perftools-devel、sed、perlがインストールされているか確認します。
sedとperlは、恐らくほとんどの環境ではインストールされていると思います。
openssl-devel、pkgconfig、pcre-develはbaseリポジトリにあるので、何のオプションもなしにyumコマンドでインストールできるはずです。
google-perftools-devel は、RPM Searchから探して持って来ました。なお、google-perftools-develをインストールするには、google-perftoolsも必要になります。
$ wget ftp://ftp.pbone.net/mirror/download.fedora.redhat.com/pub/fedora/epel/4/i386/google-perftools-devel-0.92-1.el4.2.i386.rpm
(↑2行に見えますが実際は1行です)
$ wget ftp://ftp.pbone.net/mirror/download.fedora.redhat.com/pub/fedora/epel/4/i386/google-perftools-0.92-1.el4.2.i386.rpm
(↑2行に見えますが実際は1行です)
$ rpm --test -ivh google-perftools-0.92-1.el4.2.i386.rpm google-perftools-devel-0.92-1.el4.2.i386.rpm
$ su -
# rpm -ivh google-perftools-0.92-1.el4.2.i386.rpm google-perftools-devel-0.92-1.el4.2.i386.rpm
# exit
続いて、一般ユーザ「oresama」に戻ってからpoundのRPMをビルドします。
$ cd ~/rpm/SPECS/
$ rpmbuild -ba pound.spec
ビルドが終わったら、poundの依存関係を確認します。
$ cd ../RPMS/i386/
$ rpm --test -ivh pound-2.4.2-1.i386.rpm
何も問題なければ、インストールを行います。
$ su -
# cd /home/oresama/rpm/RPMS/i386/
# rpm -ivh pound-2.4.2-1.i386.rpm
■■ pound.cfgを編集する
# cd /etc/pound
# cp -p pound.cfg pound.cfg.orig
# vi pound.cfg
User "nobody"
Group "nobody"
RootJail "/usr/share/pound"
Control "/var/run/pound/ctl_socket"
# Main listening ports
ListenHTTP
#Address 0.0.0.0
#poundで待ち受けるIPアドレスを指定する。
Address 192.168.0.4
Port 80
xHTTP 1
End
ListenHTTPS
#Address 0.0.0.0
#poundで待ち受けるIPアドレスを指定する。
Address 192.168.0.4
Port 443
#秘密鍵と証明書がひとまとめになったファイルを指定する。
Cert "/usr/share/ssl/certs/pound.pem"
Ciphers "ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL"
xHTTP 1
End
# Catch-all server(s)
Service
BackEnd
#バックエンドで動くサーバのIPアドレスを指定する。
Address 192.168.0.120
Port 80
#優先度を1から9で指定する。数字が大きいほど優先度が高くなる。
Priority 1
End
BackEnd
Address 192.168.0.121
Port 80
Priority 1
End
Session
#セッションの保持時間を秒単位で指定する。
#ベーシック認証のほか、クッキーなども指定できるようだ。
Type BASIC
TTL 300
End
End
設定ファイルはここまで。
■■ 証明書作成
# cd /usr/share/ssl/certs/
まずはpound.pemのバックアップを取ります。
# cp -p pound.pem pound.pem.orig
# echo -n "" > pound.pem
■ 秘密鍵の生成
# openssl genrsa -des3 -out server-key.pem 1024
■ CSRの生成
# openssl req -new -key server-key.pem -out server-csr.pem
■ 秘密鍵からパスフレーズを取り除く
# cp -p server-key.pem server-key.pem.orig
# openssl req -text -noout -in server-csr.pem
■ 証明書作成
# openssl x509 -in server-csr.pem -out server-crt.pem -req -signkey server-key.pem
■ 秘密鍵と証明書をひとつのファイルにまとめる
# cat server-key.pem > pound.pem
# cat server-crt.pem >> pound.pem
■■ 起動前の確認
poundを起動する前に、poundコマンドの引数に-cをつけて、設定の確認をします。
# pound -c
starting...
Config file /etc/pound/pound.cfg is OK
このように表示されたら、設定ファイルの書式はあっています。
設定ファイルの書式が間違っていると
# pound -c
starting...
line 7: unknown directive "ListenHTTTP " - aborted
というように、設定ファイルの行番号つきで「ここ間違ってるぞ」と教えてくれます。
また、Certファイルが壊れていても
# pound -c
starting...
line 17: SSL_CTX_use_certificate_chain_file "/usr/share/ssl/certs/pound.pem" failed - aborted
error:0906D064:PEM routines:PEM_read_bio:bad base64 decode
このようにエラーが出ます。
■■ pound起動
# /etc/init.d/pound start
Starting pound: [ OK ]
■■ pound自動起動設定
# chkconfig pound --list
pound 0:off 1:off 2:off 3:off 4:off 5:off 6:off
# chkconfig pound on
# chkconfig pound --list
pound 0:off 1:off 2:on 3:on 4:on 5:on 6:off
■■ テスト
2台あるバックエンドサーバのドキュメントルートに、ちょっとずつ内容の違うhtmlファイルを、同じファイル名(ここではindex.htmlとしましょう)でアップロードします。
http://192.168.0.4/
https://192.168.0.4/
にそれぞれアクセスし、何度かリロードして、違う表示が交互に出てきたら、正しく振り分けられています。勿論、規則正しく振り分けてくれるわけではありません。
■■ 運用
poundのログは、/var/log/messagesに出力されます。ここに、アクセスログが記録されます。
バックエンドにあるapacheのアクセスログのフォーマットはデフォルトで
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
と設定されていますが、この状態だと、poundが動いているサーバのIPアドレスが記録されてしまいます。なので、httpd.confの修正を行う必要があります。
ここを
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
こうする
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
以上で、ごくごく簡単なロードバランサができました。
ね、簡単でしょ?
これからしばらく家をあけるので、apacheのプロセス監視をどうしようかと考えていたのです。
数日はネットに繋がる環境にいられないけど、せめてapacheのダウンと復旧くらいは把握したいなー・・・
というのと、落ちっぱなしのときにずーっとメールがくるのはウザいなー・・・という思いから、以下の要件で監視スクリプトを作りました。
1. apacheのプロセスが落ちたら2回まで通知。3回目以降は無視。
2. apacheのプロセスが復旧したら通知(どれだけ落ちていたかは問わない)。
3. 無論、何もなければ通知しない。
なお、今回apacheを立ち上げなおすのは要件として含めていません。
監視スクリプトはcronで定期的に起動し、1回落ちたのか、2回以上連続して落ちているのかは、
カウントファイルを生成して数えることにします。また、apacheが復旧したら、カウントファイルは削除します。
$ touch watcher_httpd.sh
$ chmod 755 watcher_httpd.sh
$ vi watcher_httpd.sh
#!/bin/sh
ADMIN=【携帯のメールアドレス】
APID="/usr/sbin/httpd"
# フラグファイルを格納するディレクトリがなければ作成する
if [ ! -d "dat" ];
then
mkdir dat
fi
# httpdの親プロセスをつかまえる
if [ 1 -eq `ps auxwww | grep $APID | grep ^root | wc -l` ];
# httpdが生きているときの処理
then
# httpdが2回以上落ちてから復旧したときの処理
if [ -f "dat/count1_httpd" ];
then
# httpd復旧アラートメールを飛ばし、カウントファイルをすべて削除する
echo $(date)$'\n''httpd is Allived Again' | mail -s "$APID is Allived Again" $ADMIN
rm -f dat/count*_httpd
else
# httpdが1回だけ落ちてから復旧したときの処理
if [ -f "dat/count0_httpd" ];
then
echo $(date)$'\n''httpd is Allived Again' | mail -s "$APID is Allived Again" $ADMIN
rm -f dat/count0_httpd
else
:
fi
fi
# httpdが落ちたときの処理
else
if [ ! -f "dat/count0_httpd" ];
# はじめてhttpdが落ちたときの処理
then
echo $(date)$'\n''httpd is FAILED' | mail -s "$APID is FAILED" $ADMIN
touch dat/count0_httpd
# 2回目の通知処理
else
if [ ! -f "dat/count1_httpd" ];
then
echo $(date)$'\n''httpd is FAILED Again!!!' | mail -s "$APID is FAILED Again!!!" $ADMIN
touch dat/count1_httpd
fi
fi
fi
ここまで書いたら保存し、試験します。試験項目は以下の通りです。
1. apacheが動いている状態でこのスクリプトを実行し、警告メールも復旧メールも飛ばないこと。
2. apacheを落とした状態でこのスクリプトを実行し、1回目の警告メール(メール件名/本文に注目)が飛ぶこと。
3. apacheを上げてからこのスクリプトを実行し、復旧メールが飛ぶこと。
4. apacheを落とした状態でこのスクリプトを2回実行し、1回目の警告メールと2回目の警告メールが飛ぶこと。
5. さらにもう1回このスクリプトを実行し、警告メールも復旧メールも飛ばないこと。
6. apacheを上げてからこのスクリプトを実行し、復旧メールが飛ぶこと。
7. 再度apacheが上がっていることを確認し、このスクリプトを実行して警告メールも復旧メールも飛ばないこと。
以上です。
数日はネットに繋がる環境にいられないけど、せめてapacheのダウンと復旧くらいは把握したいなー・・・
というのと、落ちっぱなしのときにずーっとメールがくるのはウザいなー・・・という思いから、以下の要件で監視スクリプトを作りました。
1. apacheのプロセスが落ちたら2回まで通知。3回目以降は無視。
2. apacheのプロセスが復旧したら通知(どれだけ落ちていたかは問わない)。
3. 無論、何もなければ通知しない。
なお、今回apacheを立ち上げなおすのは要件として含めていません。
監視スクリプトはcronで定期的に起動し、1回落ちたのか、2回以上連続して落ちているのかは、
カウントファイルを生成して数えることにします。また、apacheが復旧したら、カウントファイルは削除します。
$ touch watcher_httpd.sh
$ chmod 755 watcher_httpd.sh
$ vi watcher_httpd.sh
#!/bin/sh
ADMIN=【携帯のメールアドレス】
APID="/usr/sbin/httpd"
# フラグファイルを格納するディレクトリがなければ作成する
if [ ! -d "dat" ];
then
mkdir dat
fi
# httpdの親プロセスをつかまえる
if [ 1 -eq `ps auxwww | grep $APID | grep ^root | wc -l` ];
# httpdが生きているときの処理
then
# httpdが2回以上落ちてから復旧したときの処理
if [ -f "dat/count1_httpd" ];
then
# httpd復旧アラートメールを飛ばし、カウントファイルをすべて削除する
echo $(date)$'\n''httpd is Allived Again' | mail -s "$APID is Allived Again" $ADMIN
rm -f dat/count*_httpd
else
# httpdが1回だけ落ちてから復旧したときの処理
if [ -f "dat/count0_httpd" ];
then
echo $(date)$'\n''httpd is Allived Again' | mail -s "$APID is Allived Again" $ADMIN
rm -f dat/count0_httpd
else
:
fi
fi
# httpdが落ちたときの処理
else
if [ ! -f "dat/count0_httpd" ];
# はじめてhttpdが落ちたときの処理
then
echo $(date)$'\n''httpd is FAILED' | mail -s "$APID is FAILED" $ADMIN
touch dat/count0_httpd
# 2回目の通知処理
else
if [ ! -f "dat/count1_httpd" ];
then
echo $(date)$'\n''httpd is FAILED Again!!!' | mail -s "$APID is FAILED Again!!!" $ADMIN
touch dat/count1_httpd
fi
fi
fi
ここまで書いたら保存し、試験します。試験項目は以下の通りです。
1. apacheが動いている状態でこのスクリプトを実行し、警告メールも復旧メールも飛ばないこと。
2. apacheを落とした状態でこのスクリプトを実行し、1回目の警告メール(メール件名/本文に注目)が飛ぶこと。
3. apacheを上げてからこのスクリプトを実行し、復旧メールが飛ぶこと。
4. apacheを落とした状態でこのスクリプトを2回実行し、1回目の警告メールと2回目の警告メールが飛ぶこと。
5. さらにもう1回このスクリプトを実行し、警告メールも復旧メールも飛ばないこと。
6. apacheを上げてからこのスクリプトを実行し、復旧メールが飛ぶこと。
7. 再度apacheが上がっていることを確認し、このスクリプトを実行して警告メールも復旧メールも飛ばないこと。
以上です。
こんちわ、久々に登場 (っ´∀`)っ ゃー です。このたび引越することになったので、自宅サーバにあるコンテンツを安いVPSへ引越することにしました。移行先の管理はほとんどPLESKでできるので便利です。パッケージのインストールはコマンドラインから行うものの、ゾーン作成やバーチャルホスト作成はすべてブラウザでの作業です。
■■ 旧環境コンテンツバックアップ
あらかじめ、旧環境のコンテンツとDBをバックアップします。コンテンツは、ドキュメントルート以下をtar.gzで固めて新サーバへSCPします。DBはMySQLを使っているので、以下のようにしてダンプをとります。
$ mysqldump -u root -p 【データベース名】 > blogs.sql
■■ バーチャルホスト作成
PLESKにログイン → ログイン後のメニューから
ドメイン → Add New Domain
をクリックする
My Domains
をクリックする
Domain name blogcube.info
(wwwにチェックを入れる)
Proceed to hosting setup にチェックを入れ、OKをクリックする
Warning: The domain resolves to another IP address (43.244.34.199). Please correct DNS settings.
というメッセージが出るが、まだネームサーバの移行をしていないために表示されるものなので気にしない。
Hosting type Physical hosting
OK
SSLサポート なし
FTPログイン admin
PW ********
quota Unlimited
shell /bin/bash
以下にチェックを入れる
SSI support
PHP support safeモードのチェックははずす
CGI support
Perl support
Python support
FastCGI support
Web statistics Webalizer
OK
■■ DB作成
PLESKから
ドメイン → blogcube.info → Databases → Add new database
の順にクリックする
Database name blogs
OK
Database name というアイコンができるのでクリックし、ユーザを作る
■■ blogcubeのコンテンツとダンプしたDBを持ってくる
[root@hogehoge ~]# cd /var/www/vhosts/blogcube.info/private
[root@hogehoge private]# scp admin@43.244.34.199:/home/admin/admin.* ./
[root@hogehoge private]# chown admin. admin.*
■■ コンテンツを解凍する
[root@hogehoge private]# tar xvzf blogs.tar.gz
[root@hogehoge private]# chown -R admin. blogs
■■ 解凍したコンテンツをコピーする
[root@hogehoge private]# cd ../httpdocs/
[root@hogehoge httpdocs]# cp -pr ../private/blogs/* ./
■■ CGIをcgi-binディレクトリに移す
[root@hogehoge httpdocs]# cp -p *.cgi ../cgi-bin/
■■ mt-config.cgi を修正する
旧環境では、ドキュメントルート以下のどこでもCGIが使えましたが、今借りているVPSではcgi-binディレクトリが別にあるので、mt-config.cgiのCGIPathを書き換えてやる必要があります。
[root@hogehoge httpdocs]# cp -p mt-config.cgi mt-config.cgi.20080320
[root@hogehoge httpdocs]# vi mt-config.cgi
ここを
CGIPath http://www.blogcube.info/
こうする
CGIPath http://www.blogcube.info/cgi-bin/
[root@hogehoge httpdocs]# diff mt-config.cgi mt-config.cgi.20080320
17c17
< CGIPath http://www.blogcube.info/cgi-bin/
---
> CGIPath http://www.blogcube.info/
■■ mt-check.cgi を見ながら足りないモジュールをインストールする
HOSTSを書いてから
http://www.blogcube.info/cgi-bin/mt-check.cgi
にアクセスし、足りないモジュールを追加する。
■ Image::Size
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-Image-Size
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-Image-Size noarch 3.1.1-1.el4.rf rpmforge 40 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 40 k
Is this ok [y/N]: y
■ SOAP::Lite (version >= 0.5)
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-SOAP-Lite
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-SOAP-Lite noarch 0.71-1.el4.rf rpmforge 426 k
Installing for dependencies:
perl-Authen-SASL noarch 2.10-1.el4.rf rpmforge 41 k
perl-GSSAPI x86_64 0.26-1.el4.rf rpmforge 120 k
perl-MIME-Lite noarch 3.021-1.el4.rf rpmforge 94 k
perl-MailTools noarch 2.02-1.el4.rf rpmforge 98 k
perl-Net-Jabber noarch 2.0-1.2.el4.rf rpmforge 124 k
perl-Net-XMPP noarch 1.02-1.el4.rf rpmforge 126 k
perl-XML-Stream noarch 1.22-1.2.el4.rf rpmforge 77 k
Transaction Summary
=============================================================================
Install 8 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 1.1 M
Is this ok [y/N]: y
■ Image::Magick
[root@hogehoge ~]# yum --enablerepo=rpmforge install ImageMagick-perl
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
ImageMagick-perl x86_64 6.2.8.0-3.el5.4 base 146 k
Installing for dependencies:
GConf2 x86_64 2.14.0-9.el5 base 1.5 M
ImageMagick x86_64 6.2.8.0-3.el5.4 base 3.3 M
ORBit2 x86_64 2.14.3-4.el5 base 262 k
audiofile x86_64 1:0.2.6-5 base 107 k
avahi x86_64 0.6.16-1.el5 base 256 k
avahi-glib x86_64 0.6.16-1.el5 base 14 k
chkfontpath x86_64 1.10.1-1.1 base 15 k
cryptsetup-luks x86_64 1.0.3-2.2.el5 base 619 k
dbus-glib x86_64 0.70-5 base 154 k
dbus-python x86_64 0.70-7.el5 base 187 k
esound x86_64 1:0.2.36-3 base 130 k
gamin x86_64 0.1.7-8.el5 base 126 k
ghostscript x86_64 8.15.2-9.1.el5_1.1 updates 5.9 M
ghostscript-fonts noarch 5.50-13.1.1 base 801 k
gnome-keyring x86_64 0.6.0-1.fc6 base 166 k
gnome-mime-data x86_64 2.4.2-3.1 base 691 k
gnome-mount x86_64 0.5-3.el5 base 70 k
gnome-vfs2 x86_64 2.16.2-4.el5 base 1.3 M
hal x86_64 0.5.8.1-25.el5_1.1 updates 362 k
hwdata noarch 0.211-1 base 278 k
kbd x86_64 1.12-19.el5 base 1.0 M
lcms x86_64 1.15-1.2.2 base 170 k
libFS x86_64 1.0.0-3.1 base 30 k
libIDL x86_64 0.8.7-1.fc6 base 87 k
libXfont x86_64 1.2.2-1.0.3.el5_1 updates 246 k
libXres x86_64 1.0.1-3.1 base 14 k
libbonobo x86_64 2.16.0-1.fc6 base 521 k
libbonoboui x86_64 2.16.0-1.fc6 base 394 k
libcroco x86_64 0.6.1-2.1 base 129 k
libdaemon x86_64 0.10-5.el5 base 24 k
libfontenc x86_64 1.0.2-2.2.el5 base 19 k
libglade2 x86_64 2.6.0-2 base 96 k
libgnome x86_64 2.16.0-6.el5 base 860 k
libgnomecanvas x86_64 2.14.0-4.1 base 224 k
libgnomeui x86_64 2.16.0-5.el5 base 984 k
libgsf x86_64 1.14.1-6.1 base 113 k
libnotify x86_64 0.4.2-6.el5 base 38 k
librsvg2 x86_64 2.16.1-1.el5 base 178 k
libvolume_id x86_64 095-14.9.el5 base 37 k
libwmf x86_64 0.2.8.4-10.1 base 821 k
libwnck x86_64 2.16.0-4.fc6 base 185 k
notification-daemon x86_64 0.3.5-8.el5 base 48 k
pciutils x86_64 2.2.3-4 base 79 k
pm-utils x86_64 0.99.3-6.el5.centos.17 base 131 k
shared-mime-info x86_64 0.19-3.el5 base 148 k
startup-notification x86_64 0.8-4.1 base 32 k
ttmkfdir x86_64 3.0.9-23.el5 base 46 k
urw-fonts noarch 2.3-6.1.1 base 4.5 M
xorg-x11-font-utils x86_64 1:7.1-2 base 77 k
xorg-x11-xfs x86_64 1:1.0.2-4 base 73 k
Transaction Summary
=============================================================================
Install 51 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 28 M
Is this ok [y/N]: y
■ Crypt::DSA
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-Crypt-DSA
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-Crypt-DSA noarch 0.14-1.el4.rf rpmforge 35 k
Installing for dependencies:
perl-Convert-ASN1 noarch 0.20-1.1 base 42 k
perl-Convert-PEM noarch 0.07-1.2.el4.rf rpmforge 19 k
perl-Data-Buffer noarch 0.04-1.2.el4.rf rpmforge 13 k
Transaction Summary
=============================================================================
Install 4 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 109 k
Is this ok [y/N]: y
■ XML::Atom
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-XML-Atom
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-XML-Atom noarch 0.23-1.el4.rf rpmforge 46 k
Installing for dependencies:
perl-Class-Singleton x86_64 1.03-1.2.el4.rf rpmforge 14 k
perl-DateTime x86_64 0.42-1.el4.rf rpmforge 127 k
perl-DateTime-Locale noarch 0.35-1.el4.rf rpmforge 144 k
perl-DateTime-TimeZone noarch 0.6904-1.el4.rf rpmforge 397 k
perl-Params-Validate x86_64 0.89-1.el4.rf rpmforge 107 k
Transaction Summary
=============================================================================
Install 6 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 836 k
Is this ok [y/N]: y
[root@hogehoge ~]# yum install perl-XML-Parser
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-XML-Parser x86_64 2.34-6.1.2.2.1 base 210 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 210 k
Is this ok [y/N]: y
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-XML-XPath
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-XML-XPath noarch 1.13-2.2.el4.rf rpmforge 81 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 81 k
Is this ok [y/N]: y
■ Cache::Memcached
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-Cache-Memcached
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-Cache-Memcached noarch 1.24-1.el4.rf rpmforge 26 k
Installing for dependencies:
perl-String-CRC32 x86_64 1.4-2.fc6 base 13 k
Transaction Summary
=============================================================================
Install 2 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 39 k
Is this ok [y/N]: y
■ IO::Compress::Gzip
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-PerlIO-gzip
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-PerlIO-gzip x86_64 0.18-1.el4.rf rpmforge 44 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 44 k
Is this ok [y/N]: y
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-IO-Compress-Base
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-IO-Compress-Base noarch 2.008-1.el4.rf rpmforge 54 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 54 k
Is this ok [y/N]: y
■ IO::Compress::Gzip IO::Uncompress::Gunzip
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-IO-Compress-Zlib
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-IO-Compress-Zlib noarch 2.008-1.el4.rf rpmforge 137 k
Installing for dependencies:
perl-Compress-Raw-Zlib x86_64 2.008-1.el4.rf rpmforge 171 k
Transaction Summary
=============================================================================
Install 2 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 308 k
Is this ok [y/N]: y
■ Archive::Zip
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-Archive-Zip
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-Archive-Zip noarch 1.23-1.el4.rf rpmforge 112 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 112 k
Is this ok [y/N]: y
■ XML::SAX
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-XML-SAX
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-XML-SAX noarch 0.16-1.el4.rf rpmforge 77 k
Installing for dependencies:
perl-XML-NamespaceSupport noarch 1.09-1.2.1 base 15 k
Transaction Summary
=============================================================================
Install 2 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 93 k
Is this ok [y/N]: y
■ Mail::Sendmail
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-Mail-Sendmail
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-Mail-Sendmail noarch 0.79-1.2.el4.rf rpmforge 23 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 23 k
Is this ok [y/N]: y
これで全てOK
■■ プラグインなどをcgi-binにコピー
[root@hogehoge ~]# cd /var/www/vhosts/blogcube.info/httpdocs
[root@hogehoge httpdocs]# cp -rp ./`ls -lA | egrep ^d | awk '{print $9}' | egrep -v '(test|nullpopopo|revenge)'` ../cgi-bin/
■■ mt-config.cgi を修正する
ここを
CGIPath http://www.blogcube.info/
こうする
CGIPath http://www.blogcube.info/cgi-bin/
■■ エラー修正
/var/www/vhosts/blogcube.info/statistics/logs/error_log をtailしていると
[Wed Mar 19 23:51:09 2008] [error] [client 43.244.34.199] Premature end of script headers: mt.cgi
[Wed Mar 19 23:51:27 2008] [error] [client 43.244.34.199] Premature end of script headers: mt-config.cgi
と表示される。
なので、
[root@hogehoge cgi-bin]# cd ..
[root@hogehoge blogcube.info]# chmod 755 cgi-bin
そして、プログラムが書き込みを行えるように
[root@hogehoge blogcube.info]# chmod 777 httpdocs/
■■ ブログを作成する
http://www.blogcube.info/cgi-bin/mt.cgi
■■ まだ今までのブログが見えないので、sqlを流し込む
[root@hogehoge blogcube.info]# cd private/
[root@hogehoge private]# mysql -u blogs -p blogs < blogs.sql
■■ リンクテスト
ひととおり、ダッシュボードのリンクをクリックして問題ないことを確認した
■■ サブドメイン作成
PLESKから、サブドメインを作成する。作るのは以下のもの。
revenge
nullpopopo
■ サブドメインから余計なものを削除する
[root@hogehoge ~]# rm -fr /var/www/vhosts/blogcube.info/subdomains/revenge/httpdocs/*
[root@hogehoge ~]# rm -fr /var/www/vhosts/blogcube.info/subdomains/nullpopopo/httpdocs/*
■ サブドメインのディレクトリにコンテンツをコピーする
[root@hogehoge ~]# cp -pr /var/www/vhosts/blogcube.info/httpdocs/revenge/* /var/www/vhosts/blogcube.info/subdomains/revenge/httpdocs/
[root@hogehoge ~]# cp -pr /var/www/vhosts/blogcube.info/httpdocs/nullpopopo/* /var/www/vhosts/blogcube.info/subdomains/nullpopopo/httpdocs/
■■ サイトパスを変更する
それぞれのブログごとに、サイトパスを変更後、再構築をする。
■ nullpopopo
old /home/admin/public_html/blogcube/nullpopopo/
new /var/www/vhosts/blogcube.info/subdomains/nullpopopo/httpdocs/
■ revenge
old /home/admin/public_html/blogcube/revenge/
new /var/www/vhosts/blogcube.info/subdomains/revenge/httpdocs/
■ www
old /home/admin/public_html/blogcube
new /var/www/vhosts/blogcube.info/httpdocs
■■ 更新テスト
更新先のほうで、エントリを投稿し、hostsを書いたブラウザから見て反映されていて、かつ、hostsをコメントアウトしたら更新が反映されなくなることを確認する。
■■ ネームサーバ移転
バリュードメインで、ネームサーバをVPSサーバに向ける。そして、旧サーバからblogcube.infoのゾーンを削除し、再度ブラウザで確認する。
以上、終了。
■■ 旧環境コンテンツバックアップ
あらかじめ、旧環境のコンテンツとDBをバックアップします。コンテンツは、ドキュメントルート以下をtar.gzで固めて新サーバへSCPします。DBはMySQLを使っているので、以下のようにしてダンプをとります。
$ mysqldump -u root -p 【データベース名】 > blogs.sql
■■ バーチャルホスト作成
PLESKにログイン → ログイン後のメニューから
ドメイン → Add New Domain
をクリックする
My Domains
をクリックする
Domain name blogcube.info
(wwwにチェックを入れる)
Proceed to hosting setup にチェックを入れ、OKをクリックする
Warning: The domain resolves to another IP address (43.244.34.199). Please correct DNS settings.
というメッセージが出るが、まだネームサーバの移行をしていないために表示されるものなので気にしない。
Hosting type Physical hosting
OK
SSLサポート なし
FTPログイン admin
PW ********
quota Unlimited
shell /bin/bash
以下にチェックを入れる
SSI support
PHP support safeモードのチェックははずす
CGI support
Perl support
Python support
FastCGI support
Web statistics Webalizer
OK
■■ DB作成
PLESKから
ドメイン → blogcube.info → Databases → Add new database
の順にクリックする
Database name blogs
OK
Database name というアイコンができるのでクリックし、ユーザを作る
■■ blogcubeのコンテンツとダンプしたDBを持ってくる
[root@hogehoge ~]# cd /var/www/vhosts/blogcube.info/private
[root@hogehoge private]# scp admin@43.244.34.199:/home/admin/admin.* ./
[root@hogehoge private]# chown admin. admin.*
■■ コンテンツを解凍する
[root@hogehoge private]# tar xvzf blogs.tar.gz
[root@hogehoge private]# chown -R admin. blogs
■■ 解凍したコンテンツをコピーする
[root@hogehoge private]# cd ../httpdocs/
[root@hogehoge httpdocs]# cp -pr ../private/blogs/* ./
■■ CGIをcgi-binディレクトリに移す
[root@hogehoge httpdocs]# cp -p *.cgi ../cgi-bin/
■■ mt-config.cgi を修正する
旧環境では、ドキュメントルート以下のどこでもCGIが使えましたが、今借りているVPSではcgi-binディレクトリが別にあるので、mt-config.cgiのCGIPathを書き換えてやる必要があります。
[root@hogehoge httpdocs]# cp -p mt-config.cgi mt-config.cgi.20080320
[root@hogehoge httpdocs]# vi mt-config.cgi
ここを
CGIPath http://www.blogcube.info/
こうする
CGIPath http://www.blogcube.info/cgi-bin/
[root@hogehoge httpdocs]# diff mt-config.cgi mt-config.cgi.20080320
17c17
< CGIPath http://www.blogcube.info/cgi-bin/
---
> CGIPath http://www.blogcube.info/
■■ mt-check.cgi を見ながら足りないモジュールをインストールする
HOSTSを書いてから
http://www.blogcube.info/cgi-bin/mt-check.cgi
にアクセスし、足りないモジュールを追加する。
■ Image::Size
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-Image-Size
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-Image-Size noarch 3.1.1-1.el4.rf rpmforge 40 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 40 k
Is this ok [y/N]: y
■ SOAP::Lite (version >= 0.5)
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-SOAP-Lite
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-SOAP-Lite noarch 0.71-1.el4.rf rpmforge 426 k
Installing for dependencies:
perl-Authen-SASL noarch 2.10-1.el4.rf rpmforge 41 k
perl-GSSAPI x86_64 0.26-1.el4.rf rpmforge 120 k
perl-MIME-Lite noarch 3.021-1.el4.rf rpmforge 94 k
perl-MailTools noarch 2.02-1.el4.rf rpmforge 98 k
perl-Net-Jabber noarch 2.0-1.2.el4.rf rpmforge 124 k
perl-Net-XMPP noarch 1.02-1.el4.rf rpmforge 126 k
perl-XML-Stream noarch 1.22-1.2.el4.rf rpmforge 77 k
Transaction Summary
=============================================================================
Install 8 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 1.1 M
Is this ok [y/N]: y
■ Image::Magick
[root@hogehoge ~]# yum --enablerepo=rpmforge install ImageMagick-perl
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
ImageMagick-perl x86_64 6.2.8.0-3.el5.4 base 146 k
Installing for dependencies:
GConf2 x86_64 2.14.0-9.el5 base 1.5 M
ImageMagick x86_64 6.2.8.0-3.el5.4 base 3.3 M
ORBit2 x86_64 2.14.3-4.el5 base 262 k
audiofile x86_64 1:0.2.6-5 base 107 k
avahi x86_64 0.6.16-1.el5 base 256 k
avahi-glib x86_64 0.6.16-1.el5 base 14 k
chkfontpath x86_64 1.10.1-1.1 base 15 k
cryptsetup-luks x86_64 1.0.3-2.2.el5 base 619 k
dbus-glib x86_64 0.70-5 base 154 k
dbus-python x86_64 0.70-7.el5 base 187 k
esound x86_64 1:0.2.36-3 base 130 k
gamin x86_64 0.1.7-8.el5 base 126 k
ghostscript x86_64 8.15.2-9.1.el5_1.1 updates 5.9 M
ghostscript-fonts noarch 5.50-13.1.1 base 801 k
gnome-keyring x86_64 0.6.0-1.fc6 base 166 k
gnome-mime-data x86_64 2.4.2-3.1 base 691 k
gnome-mount x86_64 0.5-3.el5 base 70 k
gnome-vfs2 x86_64 2.16.2-4.el5 base 1.3 M
hal x86_64 0.5.8.1-25.el5_1.1 updates 362 k
hwdata noarch 0.211-1 base 278 k
kbd x86_64 1.12-19.el5 base 1.0 M
lcms x86_64 1.15-1.2.2 base 170 k
libFS x86_64 1.0.0-3.1 base 30 k
libIDL x86_64 0.8.7-1.fc6 base 87 k
libXfont x86_64 1.2.2-1.0.3.el5_1 updates 246 k
libXres x86_64 1.0.1-3.1 base 14 k
libbonobo x86_64 2.16.0-1.fc6 base 521 k
libbonoboui x86_64 2.16.0-1.fc6 base 394 k
libcroco x86_64 0.6.1-2.1 base 129 k
libdaemon x86_64 0.10-5.el5 base 24 k
libfontenc x86_64 1.0.2-2.2.el5 base 19 k
libglade2 x86_64 2.6.0-2 base 96 k
libgnome x86_64 2.16.0-6.el5 base 860 k
libgnomecanvas x86_64 2.14.0-4.1 base 224 k
libgnomeui x86_64 2.16.0-5.el5 base 984 k
libgsf x86_64 1.14.1-6.1 base 113 k
libnotify x86_64 0.4.2-6.el5 base 38 k
librsvg2 x86_64 2.16.1-1.el5 base 178 k
libvolume_id x86_64 095-14.9.el5 base 37 k
libwmf x86_64 0.2.8.4-10.1 base 821 k
libwnck x86_64 2.16.0-4.fc6 base 185 k
notification-daemon x86_64 0.3.5-8.el5 base 48 k
pciutils x86_64 2.2.3-4 base 79 k
pm-utils x86_64 0.99.3-6.el5.centos.17 base 131 k
shared-mime-info x86_64 0.19-3.el5 base 148 k
startup-notification x86_64 0.8-4.1 base 32 k
ttmkfdir x86_64 3.0.9-23.el5 base 46 k
urw-fonts noarch 2.3-6.1.1 base 4.5 M
xorg-x11-font-utils x86_64 1:7.1-2 base 77 k
xorg-x11-xfs x86_64 1:1.0.2-4 base 73 k
Transaction Summary
=============================================================================
Install 51 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 28 M
Is this ok [y/N]: y
■ Crypt::DSA
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-Crypt-DSA
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-Crypt-DSA noarch 0.14-1.el4.rf rpmforge 35 k
Installing for dependencies:
perl-Convert-ASN1 noarch 0.20-1.1 base 42 k
perl-Convert-PEM noarch 0.07-1.2.el4.rf rpmforge 19 k
perl-Data-Buffer noarch 0.04-1.2.el4.rf rpmforge 13 k
Transaction Summary
=============================================================================
Install 4 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 109 k
Is this ok [y/N]: y
■ XML::Atom
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-XML-Atom
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-XML-Atom noarch 0.23-1.el4.rf rpmforge 46 k
Installing for dependencies:
perl-Class-Singleton x86_64 1.03-1.2.el4.rf rpmforge 14 k
perl-DateTime x86_64 0.42-1.el4.rf rpmforge 127 k
perl-DateTime-Locale noarch 0.35-1.el4.rf rpmforge 144 k
perl-DateTime-TimeZone noarch 0.6904-1.el4.rf rpmforge 397 k
perl-Params-Validate x86_64 0.89-1.el4.rf rpmforge 107 k
Transaction Summary
=============================================================================
Install 6 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 836 k
Is this ok [y/N]: y
[root@hogehoge ~]# yum install perl-XML-Parser
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-XML-Parser x86_64 2.34-6.1.2.2.1 base 210 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 210 k
Is this ok [y/N]: y
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-XML-XPath
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-XML-XPath noarch 1.13-2.2.el4.rf rpmforge 81 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 81 k
Is this ok [y/N]: y
■ Cache::Memcached
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-Cache-Memcached
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-Cache-Memcached noarch 1.24-1.el4.rf rpmforge 26 k
Installing for dependencies:
perl-String-CRC32 x86_64 1.4-2.fc6 base 13 k
Transaction Summary
=============================================================================
Install 2 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 39 k
Is this ok [y/N]: y
■ IO::Compress::Gzip
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-PerlIO-gzip
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-PerlIO-gzip x86_64 0.18-1.el4.rf rpmforge 44 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 44 k
Is this ok [y/N]: y
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-IO-Compress-Base
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-IO-Compress-Base noarch 2.008-1.el4.rf rpmforge 54 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 54 k
Is this ok [y/N]: y
■ IO::Compress::Gzip IO::Uncompress::Gunzip
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-IO-Compress-Zlib
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-IO-Compress-Zlib noarch 2.008-1.el4.rf rpmforge 137 k
Installing for dependencies:
perl-Compress-Raw-Zlib x86_64 2.008-1.el4.rf rpmforge 171 k
Transaction Summary
=============================================================================
Install 2 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 308 k
Is this ok [y/N]: y
■ Archive::Zip
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-Archive-Zip
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-Archive-Zip noarch 1.23-1.el4.rf rpmforge 112 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 112 k
Is this ok [y/N]: y
■ XML::SAX
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-XML-SAX
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-XML-SAX noarch 0.16-1.el4.rf rpmforge 77 k
Installing for dependencies:
perl-XML-NamespaceSupport noarch 1.09-1.2.1 base 15 k
Transaction Summary
=============================================================================
Install 2 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 93 k
Is this ok [y/N]: y
■ Mail::Sendmail
[root@hogehoge ~]# yum --enablerepo=rpmforge install perl-Mail-Sendmail
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
perl-Mail-Sendmail noarch 0.79-1.2.el4.rf rpmforge 23 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 23 k
Is this ok [y/N]: y
これで全てOK
■■ プラグインなどをcgi-binにコピー
[root@hogehoge ~]# cd /var/www/vhosts/blogcube.info/httpdocs
[root@hogehoge httpdocs]# cp -rp ./`ls -lA | egrep ^d | awk '{print $9}' | egrep -v '(test|nullpopopo|revenge)'` ../cgi-bin/
■■ mt-config.cgi を修正する
ここを
CGIPath http://www.blogcube.info/
こうする
CGIPath http://www.blogcube.info/cgi-bin/
■■ エラー修正
/var/www/vhosts/blogcube.info/statistics/logs/error_log をtailしていると
[Wed Mar 19 23:51:09 2008] [error] [client 43.244.34.199] Premature end of script headers: mt.cgi
[Wed Mar 19 23:51:27 2008] [error] [client 43.244.34.199] Premature end of script headers: mt-config.cgi
と表示される。
なので、
[root@hogehoge cgi-bin]# cd ..
[root@hogehoge blogcube.info]# chmod 755 cgi-bin
そして、プログラムが書き込みを行えるように
[root@hogehoge blogcube.info]# chmod 777 httpdocs/
■■ ブログを作成する
http://www.blogcube.info/cgi-bin/mt.cgi
■■ まだ今までのブログが見えないので、sqlを流し込む
[root@hogehoge blogcube.info]# cd private/
[root@hogehoge private]# mysql -u blogs -p blogs < blogs.sql
■■ リンクテスト
ひととおり、ダッシュボードのリンクをクリックして問題ないことを確認した
■■ サブドメイン作成
PLESKから、サブドメインを作成する。作るのは以下のもの。
revenge
nullpopopo
■ サブドメインから余計なものを削除する
[root@hogehoge ~]# rm -fr /var/www/vhosts/blogcube.info/subdomains/revenge/httpdocs/*
[root@hogehoge ~]# rm -fr /var/www/vhosts/blogcube.info/subdomains/nullpopopo/httpdocs/*
■ サブドメインのディレクトリにコンテンツをコピーする
[root@hogehoge ~]# cp -pr /var/www/vhosts/blogcube.info/httpdocs/revenge/* /var/www/vhosts/blogcube.info/subdomains/revenge/httpdocs/
[root@hogehoge ~]# cp -pr /var/www/vhosts/blogcube.info/httpdocs/nullpopopo/* /var/www/vhosts/blogcube.info/subdomains/nullpopopo/httpdocs/
■■ サイトパスを変更する
それぞれのブログごとに、サイトパスを変更後、再構築をする。
■ nullpopopo
old /home/admin/public_html/blogcube/nullpopopo/
new /var/www/vhosts/blogcube.info/subdomains/nullpopopo/httpdocs/
■ revenge
old /home/admin/public_html/blogcube/revenge/
new /var/www/vhosts/blogcube.info/subdomains/revenge/httpdocs/
■ www
old /home/admin/public_html/blogcube
new /var/www/vhosts/blogcube.info/httpdocs
■■ 更新テスト
更新先のほうで、エントリを投稿し、hostsを書いたブラウザから見て反映されていて、かつ、hostsをコメントアウトしたら更新が反映されなくなることを確認する。
■■ ネームサーバ移転
バリュードメインで、ネームサーバをVPSサーバに向ける。そして、旧サーバからblogcube.infoのゾーンを削除し、再度ブラウザで確認する。
以上、終了。
久々のサーバ構築案件なので、忘れんようにメモ。
今回作成するホスト www.example.com はバーチャルホストとして作ります。
そして、 www.example.com のFTPアカウントはMySQLで管理します。
今後、FTPアカウントの管理やバーチャルホストのconfigはプログラムにやらせたいなー。
■■ webスペースの領域作成
FTPアカウントは今後MySQLに管理させます。ここのUID/GIDは、UNIXアカウントとは別物です。
FTPアカウントをMySQLに管理させる方法は次のエントリに書きます。乞うご期待!
[root@hoge ~]# mkdir /home/vhost
[root@hoge ~]# mkdir -p /home/vhost/www.example.com/{html,cgi-bin,logs,auth}
[root@hoge ~]# chown -R 1000:1000 /home/vhost/
■■ apache インストール
[root@hoge ~]# yum install httpd mod_ssl
(中略)
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
httpd i386 2.0.52-38.ent.centos4.2 update 891 k
mod_ssl i386 1:2.0.52-38.ent.centos4.2 update 100 k
Installing for dependencies:
apr i386 0.9.4-24.9 base 93 k
apr-util i386 0.9.4-21 base 51 k
distcache i386 1.4.5-6 base 111 k
httpd-suexec i386 2.0.52-38.ent.centos4.2 update 30 k
Transaction Summary
=============================================================================
Install 6 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 1.2 M
Is this ok [y/N]: y
■■ php5のインストール
通常、CentOS4.x系では、yumコマンドでphpをインストールしようとすると、
PHP4系がインストールされます。しかし、もうサポート終わってるので
(セキュリティサポートは2008年8月まで)
centosplusリポジトリを一時的に有効にしてやってPHP5をインストールしてやります。
[root@hoge ~]# yum --enablerepo=centosplus install php
(中略)
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
php i386 5.1.6-3.el4s1.8 centosplus 1.1 M
Installing for dependencies:
curl i386 7.12.1-11.el4 base 230 k
libidn i386 0.5.6-1 base 169 k
php-cli i386 5.1.6-3.el4s1.8 centosplus 2.0 M
php-common i386 5.1.6-3.el4s1.8 centosplus 136 k
Transaction Summary
=============================================================================
Install 5 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 3.7 M
Is this ok [y/N]: y
■ さらに、pearもcentosplus経由でインストールする
[root@hoge ~]# yum --enablerepo=centosplus install php-pear
(中略)
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
php-pear noarch 1:1.4.11-1.el4s1.1 centosplus 345 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 345 k
Is this ok [y/N]: y
■ pearが有効になっているか確認する
[root@hoge ~]# pear list
Installed packages, channel pear.php.net:
=========================================
Package Version State
Archive_Tar 1.3.1 stable
Console_Getopt 1.2 stable
PEAR 1.4.11 stable
XML_RPC 1.5.1 stable
■■ apacheの設定を修正する
■ httpd.confを修正する
[root@hoge ~]# cd /etc/httpd/conf
[root@hoge conf]# cp -p httpd.conf httpd.conf.orig
[root@hoge conf]# vi httpd.conf
#---- ServerTokensディレクティブでの表示を最小限にするため
#---- ここを
#---- ServerTokens OS
#----
#---- こうする
#---- #ServerTokens OS
#---- ServerTokens Prod
#---- サーバ管理者のメールアドレスを変更するため
#---- ここを
#---- ServerAdmin root@localhost
#----
#---- こうする
#---- #ServerAdmin root@localhost
#---- ServerAdmin webmaster@hoge.example.com
#---- すべてvirtualhostで管理するので、以下をコメントアウトする
#----
#---- ここを
#---- DocumentRoot "/var/www/html"
#---- こうする
#---- #DocumentRoot "/var/www/html"
#----
#---- ここを
#---- <Directory />
#---- Options FollowSymLinks
#---- AllowOverride None
#---- </Directory>
#----
#---- こうする
#---- #<Directory />
#---- # Options FollowSymLinks
#---- # AllowOverride None
#---- #</Directory>
#----
#---- ここを
#---- <Directory "/var/www/html">
#----
#---- #
#---- # Possible values for the Options directive are "None", "All",
#---- # or any combination of:
#---- # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#---- #
#---- # Note that "MultiViews" must be named *explicitly* --- "Options All"
#---- # doesn't give it to you.
#---- #
#---- # The Options directive is both complicated and important. Please see
#---- # http://httpd.apache.org/docs-2.0/mod/core.html#options
#---- # for more information.
#---- #
#---- Options Indexes FollowSymLinks
#----
#---- #
#---- # AllowOverride controls what directives may be placed in .htaccess files.
#---- # It can be "All", "None", or any combination of the keywords:
#---- # Options FileInfo AuthConfig Limit
#---- #
#---- AllowOverride None
#----
#---- #
#---- # Controls who can get stuff from this server.
#---- #
#---- Order allow,deny
#---- Allow from all
#----
#---- </Directory>
#----
#---- こうする
#---- ##### comented by nullpopopo 2008/02/10
#---- #<Directory "/var/www/html">
#---- #
#---- ##
#---- ## Possible values for the Options directive are "None", "All",
#---- ## or any combination of:
#---- ## Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#---- ##
#---- ## Note that "MultiViews" must be named *explicitly* --- "Options All"
#---- ## doesn't give it to you.
#---- ##
#---- ## The Options directive is both complicated and important. Please see
#---- ## http://httpd.apache.org/docs-2.0/mod/core.html#options
#---- ## for more information.
#---- ##
#---- # Options Indexes FollowSymLinks
#---- #
#---- ##
#---- ## AllowOverride controls what directives may be placed in .htaccess files.
#---- ## It can be "All", "None", or any combination of the keywords:
#---- ## Options FileInfo AuthConfig Limit
#---- ##
#---- # AllowOverride None
#---- #
#---- ##
#---- ## Controls who can get stuff from this server.
#---- ##
#---- # Order allow,deny
#---- # Allow from all
#---- #
#---- #</Directory>
#---- userdirを使わないので無効にする
#----
#---- ここを
#---- <IfModule mod_userdir.c>
#---- #
#---- # UserDir is disabled by default since it can confirm the presence
#---- # of a username on the system (depending on home directory
#---- # permissions).
#---- #
#---- UserDir disable
#----
#---- #
#---- # To enable requests to /~user/ to serve the user's public_html
#---- # directory, remove the "UserDir disable" line above, and uncomment
#---- # the following line instead:
#---- #
#---- #UserDir public_html
#----
#---- </IfModule>
#----
#---- こうする
#---- ##### comented by nullpopopo 2008/02/10
#---- #<IfModule mod_userdir.c>
#---- # #
#---- # # UserDir is disabled by default since it can confirm the presence
#---- # # of a username on the system (depending on home directory
#---- # # permissions).
#---- # #
#---- # UserDir disable
#---- #
#---- # #
#---- # # To enable requests to /~user/ to serve the user's public_html
#---- # # directory, remove the "UserDir disable" line above, and uncomment
#---- # # the following line instead:
#---- # #
#---- # #UserDir public_html
#---- #
#---- #</IfModule>
#----
#---- ServerSignatureをOffにしてApache が生成したドキュメント中の情報を抑制する
#----
#---- ここを
#---- ServerSignature On
#----
#---- こうする
#---- #ServerSignature On
#---- ServerSignature Off
#---- WebDAVを使わないので無効にする
#----
#---- ここを
#---- #
#---- # WebDAV module configuration section.
#---- #
#---- <IfModule mod_dav_fs.c>
#---- # Location of the WebDAV lock database.
#---- DAVLockDB /var/lib/dav/lockdb
#---- </IfModule>
#----
#---- こうする
#---- ##
#---- ## WebDAV module configuration section.
#---- ##
#---- #<IfModule mod_dav_fs.c>
#---- # # Location of the WebDAV lock database.
#---- # DAVLockDB /var/lib/dav/lockdb
#---- #</IfModule>
#---- /var/www/cgi-bin/ を使わないので無効にする
#----
#---- ここを
#---- #
#---- # ScriptAlias: This controls which directories contain server scripts.
#---- # ScriptAliases are essentially the same as Aliases, except that
#---- # documents in the realname directory are treated as applications and
#---- # run by the server when requested rather than as documents sent to the client.
#---- # The same rules about trailing "/" apply to ScriptAlias directives as to
#---- # Alias.
#---- #
#---- ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
#----
#---- #
#---- # "/var/www/cgi-bin" should be changed to whatever your ScriptAliased
#---- # CGI directory exists, if you have that configured.
#---- #
#---- <Directory "/var/www/cgi-bin">
#---- AllowOverride None
#---- Options None
#---- Order allow,deny
#---- Allow from all
#---- </Directory>
#----
#---- こうする
#---- ##
#---- ## ScriptAlias: This controls which directories contain server scripts.
#---- ## ScriptAliases are essentially the same as Aliases, except that
#---- ## documents in the realname directory are treated as applications and
#---- ## run by the server when requested rather than as documents sent to the client.
#---- ## The same rules about trailing "/" apply to ScriptAlias directives as to
#---- ## Alias.
#---- ##
#---- #ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
#---- #
#---- ##
#---- ## "/var/www/cgi-bin" should be changed to whatever your ScriptAliased
#---- ## CGI directory exists, if you have that configured.
#---- ##
#---- #<Directory "/var/www/cgi-bin">
#---- # AllowOverride None
#---- # Options None
#---- # Order allow,deny
#---- # Allow from all
#---- #</Directory>
#---- 言語設定のUTF-8固定を無効にする
#----
#---- ここを
#---- AddDefaultCharset UTF-8
#----
#---- こうする
#---- #AddDefaultCharset UTF-8
#---- AddDefaultCharset Off
#---- 最終行に、バーチャルホスト用のディレクトリをincludeする設定を書く
#----
#---- Include conf/vconf.d/*.conf
ここまで終わったらhttpd.confを保存します。
■ vconf.d 作成
[root@hoge conf]# pwd
/etc/httpd/conf
[root@hoge conf]# mkdir vconf.d
■ vconf.d にダミー用ホストのconfigを書く
[root@hoge conf]# cd vconf.d
[root@hoge vconf.d]# vi www.example.com.conf
<VirtualHost 192.168.0.110:80>
DocumentRoot /home/vhost/www.example.com/html
ServerName www.example.com
ErrorLog /home/vhost/www.example.com/logs/error.log
CustomLog /home/vhost/www.example.com/logs/access.log combined
<Directory /home/vhost/www.example.com/html>
Options Indexes FollowSymlinks MultiViews
AllowOverride Fileinfo AuthConfig
#AllowOverride All
order allow,deny
Allow from all
</Directory>
ScriptAlias /cgi-bin /home/vhost/www.example.com/cgi-bin
<Directory /home/vhost/www.example.com/cgi-bin>
Options ExecCGI
AllowOverride Fileinfo AuthConfig
order allow,deny
Allow from all
</Directory>
</VirtualHost>
■ ダミー用ホストのコンテンツディレクトリにテストファイルを置く
[root@hoge vconf.d]# cd /home/vhost/www.example.com/
[root@hoge www.example.com]# basename `pwd` > html/index.html
[root@hoge www.example.com]# vi html/phpinfo.php
<?php
phpinfo();
?>
[root@hoge www.example.com]# cd cgi-bin/
[root@hoge cgi-bin]# vi test.cgi
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><body>test</body></html>";
[root@hoge cgi-bin]# chmod 755 test.cgi
[root@hoge cgi-bin]# cd ../
[root@hoge www.example.com]# chown -R webmaster. *
■■ apacheの設定確認と起動
■ 設定確認
[root@hoge www.example.com]# cd
[root@hoge ~]# httpd -t -D DUMP_VHOSTS
VirtualHost configuration:
192.168.0.110:80 www.example.com (/etc/httpd/conf/vconf.d/www.example.com.conf:1)
wildcard NameVirtualHosts and _default_ servers:
_default_:443 hoge.example.com (/etc/httpd/conf.d/ssl.conf:88)
Syntax OK
■ 起動
[root@hoge ~]# /etc/init.d/httpd start
Starting httpd: [ OK ]
■ 自動起動設定
[root@hoge ~]# chkconfig httpd --list
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@hoge ~]# chkconfig httpd on
[root@hoge ~]# chkconfig httpd --list
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
■ エラーログ確認
[root@hoge ~]# cat /var/log/httpd/error_log
[Sun Feb 10 13:26:43 2008] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Sun Feb 10 13:26:44 2008] [notice] Digest: generating secret for digest authentication ...
[Sun Feb 10 13:26:44 2008] [notice] Digest: done
[Sun Feb 10 13:26:44 2008] [notice] LDAP: Built with OpenLDAP LDAP SDK
[Sun Feb 10 13:26:44 2008] [notice] LDAP: SSL support unavailable
[Sun Feb 10 13:26:45 2008] [notice] Apache configured -- resuming normal operations
■■ クライアントのHOSTSファイルで名前解決をして、ブラウザでアクセスする
[hostsへ以下のように書く]
192.168.0.2 www.example.com
[ブラウザで以下のURLにアクセスする]
http://www.example.com/
http://www.example.com/phpinfo.php
http://www.example.com/cgi-bin/test.cgi
今回作成するホスト www.example.com はバーチャルホストとして作ります。
そして、 www.example.com のFTPアカウントはMySQLで管理します。
今後、FTPアカウントの管理やバーチャルホストのconfigはプログラムにやらせたいなー。
■■ webスペースの領域作成
FTPアカウントは今後MySQLに管理させます。ここのUID/GIDは、UNIXアカウントとは別物です。
FTPアカウントをMySQLに管理させる方法は次のエントリに書きます。乞うご期待!
[root@hoge ~]# mkdir /home/vhost
[root@hoge ~]# mkdir -p /home/vhost/www.example.com/{html,cgi-bin,logs,auth}
[root@hoge ~]# chown -R 1000:1000 /home/vhost/
■■ apache インストール
[root@hoge ~]# yum install httpd mod_ssl
(中略)
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
httpd i386 2.0.52-38.ent.centos4.2 update 891 k
mod_ssl i386 1:2.0.52-38.ent.centos4.2 update 100 k
Installing for dependencies:
apr i386 0.9.4-24.9 base 93 k
apr-util i386 0.9.4-21 base 51 k
distcache i386 1.4.5-6 base 111 k
httpd-suexec i386 2.0.52-38.ent.centos4.2 update 30 k
Transaction Summary
=============================================================================
Install 6 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 1.2 M
Is this ok [y/N]: y
■■ php5のインストール
通常、CentOS4.x系では、yumコマンドでphpをインストールしようとすると、
PHP4系がインストールされます。しかし、もうサポート終わってるので
(セキュリティサポートは2008年8月まで)
centosplusリポジトリを一時的に有効にしてやってPHP5をインストールしてやります。
[root@hoge ~]# yum --enablerepo=centosplus install php
(中略)
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
php i386 5.1.6-3.el4s1.8 centosplus 1.1 M
Installing for dependencies:
curl i386 7.12.1-11.el4 base 230 k
libidn i386 0.5.6-1 base 169 k
php-cli i386 5.1.6-3.el4s1.8 centosplus 2.0 M
php-common i386 5.1.6-3.el4s1.8 centosplus 136 k
Transaction Summary
=============================================================================
Install 5 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 3.7 M
Is this ok [y/N]: y
■ さらに、pearもcentosplus経由でインストールする
[root@hoge ~]# yum --enablerepo=centosplus install php-pear
(中略)
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
php-pear noarch 1:1.4.11-1.el4s1.1 centosplus 345 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 345 k
Is this ok [y/N]: y
■ pearが有効になっているか確認する
[root@hoge ~]# pear list
Installed packages, channel pear.php.net:
=========================================
Package Version State
Archive_Tar 1.3.1 stable
Console_Getopt 1.2 stable
PEAR 1.4.11 stable
XML_RPC 1.5.1 stable
■■ apacheの設定を修正する
■ httpd.confを修正する
[root@hoge ~]# cd /etc/httpd/conf
[root@hoge conf]# cp -p httpd.conf httpd.conf.orig
[root@hoge conf]# vi httpd.conf
#---- ServerTokensディレクティブでの表示を最小限にするため
#---- ここを
#---- ServerTokens OS
#----
#---- こうする
#---- #ServerTokens OS
#---- ServerTokens Prod
#---- サーバ管理者のメールアドレスを変更するため
#---- ここを
#---- ServerAdmin root@localhost
#----
#---- こうする
#---- #ServerAdmin root@localhost
#---- ServerAdmin webmaster@hoge.example.com
#---- すべてvirtualhostで管理するので、以下をコメントアウトする
#----
#---- ここを
#---- DocumentRoot "/var/www/html"
#---- こうする
#---- #DocumentRoot "/var/www/html"
#----
#---- ここを
#---- <Directory />
#---- Options FollowSymLinks
#---- AllowOverride None
#---- </Directory>
#----
#---- こうする
#---- #<Directory />
#---- # Options FollowSymLinks
#---- # AllowOverride None
#---- #</Directory>
#----
#---- ここを
#---- <Directory "/var/www/html">
#----
#---- #
#---- # Possible values for the Options directive are "None", "All",
#---- # or any combination of:
#---- # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#---- #
#---- # Note that "MultiViews" must be named *explicitly* --- "Options All"
#---- # doesn't give it to you.
#---- #
#---- # The Options directive is both complicated and important. Please see
#---- # http://httpd.apache.org/docs-2.0/mod/core.html#options
#---- # for more information.
#---- #
#---- Options Indexes FollowSymLinks
#----
#---- #
#---- # AllowOverride controls what directives may be placed in .htaccess files.
#---- # It can be "All", "None", or any combination of the keywords:
#---- # Options FileInfo AuthConfig Limit
#---- #
#---- AllowOverride None
#----
#---- #
#---- # Controls who can get stuff from this server.
#---- #
#---- Order allow,deny
#---- Allow from all
#----
#---- </Directory>
#----
#---- こうする
#---- ##### comented by nullpopopo 2008/02/10
#---- #<Directory "/var/www/html">
#---- #
#---- ##
#---- ## Possible values for the Options directive are "None", "All",
#---- ## or any combination of:
#---- ## Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#---- ##
#---- ## Note that "MultiViews" must be named *explicitly* --- "Options All"
#---- ## doesn't give it to you.
#---- ##
#---- ## The Options directive is both complicated and important. Please see
#---- ## http://httpd.apache.org/docs-2.0/mod/core.html#options
#---- ## for more information.
#---- ##
#---- # Options Indexes FollowSymLinks
#---- #
#---- ##
#---- ## AllowOverride controls what directives may be placed in .htaccess files.
#---- ## It can be "All", "None", or any combination of the keywords:
#---- ## Options FileInfo AuthConfig Limit
#---- ##
#---- # AllowOverride None
#---- #
#---- ##
#---- ## Controls who can get stuff from this server.
#---- ##
#---- # Order allow,deny
#---- # Allow from all
#---- #
#---- #</Directory>
#---- userdirを使わないので無効にする
#----
#---- ここを
#---- <IfModule mod_userdir.c>
#---- #
#---- # UserDir is disabled by default since it can confirm the presence
#---- # of a username on the system (depending on home directory
#---- # permissions).
#---- #
#---- UserDir disable
#----
#---- #
#---- # To enable requests to /~user/ to serve the user's public_html
#---- # directory, remove the "UserDir disable" line above, and uncomment
#---- # the following line instead:
#---- #
#---- #UserDir public_html
#----
#---- </IfModule>
#----
#---- こうする
#---- ##### comented by nullpopopo 2008/02/10
#---- #<IfModule mod_userdir.c>
#---- # #
#---- # # UserDir is disabled by default since it can confirm the presence
#---- # # of a username on the system (depending on home directory
#---- # # permissions).
#---- # #
#---- # UserDir disable
#---- #
#---- # #
#---- # # To enable requests to /~user/ to serve the user's public_html
#---- # # directory, remove the "UserDir disable" line above, and uncomment
#---- # # the following line instead:
#---- # #
#---- # #UserDir public_html
#---- #
#---- #</IfModule>
#----
#---- ServerSignatureをOffにしてApache が生成したドキュメント中の情報を抑制する
#----
#---- ここを
#---- ServerSignature On
#----
#---- こうする
#---- #ServerSignature On
#---- ServerSignature Off
#---- WebDAVを使わないので無効にする
#----
#---- ここを
#---- #
#---- # WebDAV module configuration section.
#---- #
#---- <IfModule mod_dav_fs.c>
#---- # Location of the WebDAV lock database.
#---- DAVLockDB /var/lib/dav/lockdb
#---- </IfModule>
#----
#---- こうする
#---- ##
#---- ## WebDAV module configuration section.
#---- ##
#---- #<IfModule mod_dav_fs.c>
#---- # # Location of the WebDAV lock database.
#---- # DAVLockDB /var/lib/dav/lockdb
#---- #</IfModule>
#---- /var/www/cgi-bin/ を使わないので無効にする
#----
#---- ここを
#---- #
#---- # ScriptAlias: This controls which directories contain server scripts.
#---- # ScriptAliases are essentially the same as Aliases, except that
#---- # documents in the realname directory are treated as applications and
#---- # run by the server when requested rather than as documents sent to the client.
#---- # The same rules about trailing "/" apply to ScriptAlias directives as to
#---- # Alias.
#---- #
#---- ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
#----
#---- #
#---- # "/var/www/cgi-bin" should be changed to whatever your ScriptAliased
#---- # CGI directory exists, if you have that configured.
#---- #
#---- <Directory "/var/www/cgi-bin">
#---- AllowOverride None
#---- Options None
#---- Order allow,deny
#---- Allow from all
#---- </Directory>
#----
#---- こうする
#---- ##
#---- ## ScriptAlias: This controls which directories contain server scripts.
#---- ## ScriptAliases are essentially the same as Aliases, except that
#---- ## documents in the realname directory are treated as applications and
#---- ## run by the server when requested rather than as documents sent to the client.
#---- ## The same rules about trailing "/" apply to ScriptAlias directives as to
#---- ## Alias.
#---- ##
#---- #ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
#---- #
#---- ##
#---- ## "/var/www/cgi-bin" should be changed to whatever your ScriptAliased
#---- ## CGI directory exists, if you have that configured.
#---- ##
#---- #<Directory "/var/www/cgi-bin">
#---- # AllowOverride None
#---- # Options None
#---- # Order allow,deny
#---- # Allow from all
#---- #</Directory>
#---- 言語設定のUTF-8固定を無効にする
#----
#---- ここを
#---- AddDefaultCharset UTF-8
#----
#---- こうする
#---- #AddDefaultCharset UTF-8
#---- AddDefaultCharset Off
#---- 最終行に、バーチャルホスト用のディレクトリをincludeする設定を書く
#----
#---- Include conf/vconf.d/*.conf
ここまで終わったらhttpd.confを保存します。
■ vconf.d 作成
[root@hoge conf]# pwd
/etc/httpd/conf
[root@hoge conf]# mkdir vconf.d
■ vconf.d にダミー用ホストのconfigを書く
[root@hoge conf]# cd vconf.d
[root@hoge vconf.d]# vi www.example.com.conf
<VirtualHost 192.168.0.110:80>
DocumentRoot /home/vhost/www.example.com/html
ServerName www.example.com
ErrorLog /home/vhost/www.example.com/logs/error.log
CustomLog /home/vhost/www.example.com/logs/access.log combined
<Directory /home/vhost/www.example.com/html>
Options Indexes FollowSymlinks MultiViews
AllowOverride Fileinfo AuthConfig
#AllowOverride All
order allow,deny
Allow from all
</Directory>
ScriptAlias /cgi-bin /home/vhost/www.example.com/cgi-bin
<Directory /home/vhost/www.example.com/cgi-bin>
Options ExecCGI
AllowOverride Fileinfo AuthConfig
order allow,deny
Allow from all
</Directory>
</VirtualHost>
■ ダミー用ホストのコンテンツディレクトリにテストファイルを置く
[root@hoge vconf.d]# cd /home/vhost/www.example.com/
[root@hoge www.example.com]# basename `pwd` > html/index.html
[root@hoge www.example.com]# vi html/phpinfo.php
<?php
phpinfo();
?>
[root@hoge www.example.com]# cd cgi-bin/
[root@hoge cgi-bin]# vi test.cgi
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><body>test</body></html>";
[root@hoge cgi-bin]# chmod 755 test.cgi
[root@hoge cgi-bin]# cd ../
[root@hoge www.example.com]# chown -R webmaster. *
■■ apacheの設定確認と起動
■ 設定確認
[root@hoge www.example.com]# cd
[root@hoge ~]# httpd -t -D DUMP_VHOSTS
VirtualHost configuration:
192.168.0.110:80 www.example.com (/etc/httpd/conf/vconf.d/www.example.com.conf:1)
wildcard NameVirtualHosts and _default_ servers:
_default_:443 hoge.example.com (/etc/httpd/conf.d/ssl.conf:88)
Syntax OK
■ 起動
[root@hoge ~]# /etc/init.d/httpd start
Starting httpd: [ OK ]
■ 自動起動設定
[root@hoge ~]# chkconfig httpd --list
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@hoge ~]# chkconfig httpd on
[root@hoge ~]# chkconfig httpd --list
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
■ エラーログ確認
[root@hoge ~]# cat /var/log/httpd/error_log
[Sun Feb 10 13:26:43 2008] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Sun Feb 10 13:26:44 2008] [notice] Digest: generating secret for digest authentication ...
[Sun Feb 10 13:26:44 2008] [notice] Digest: done
[Sun Feb 10 13:26:44 2008] [notice] LDAP: Built with OpenLDAP LDAP SDK
[Sun Feb 10 13:26:44 2008] [notice] LDAP: SSL support unavailable
[Sun Feb 10 13:26:45 2008] [notice] Apache configured -- resuming normal operations
■■ クライアントのHOSTSファイルで名前解決をして、ブラウザでアクセスする
[hostsへ以下のように書く]
192.168.0.2 www.example.com
[ブラウザで以下のURLにアクセスする]
http://www.example.com/
http://www.example.com/phpinfo.php
http://www.example.com/cgi-bin/test.cgi
.htaccessを使った、アクセス制限やリファラ制限、指定されたサイト以外からの直リンク禁止を
一発でジェネレートしてくれるサイトがあった。
mod_rewriteで他所のサイトにブッ飛ばすのも、コレの応用でできると思われる。
実例は帰ってから書くとするか。。。はよ帰りたい。
一発でジェネレートしてくれるサイトがあった。
mod_rewriteで他所のサイトにブッ飛ばすのも、コレの応用でできると思われる。
実例は帰ってから書くとするか。。。はよ帰りたい。
