4月 282010
 

Bi-IPにてPoolメンバー全滅した時に、Sorry Server(Sorryページ)を表示させたいってのがよくある。BIG-IPをSorry Serverとして利用するiRuleに書いてあるが、日本語対応については、

また、上記リンクされているDiscussionによると、
日本語のHTMLコンテンツを利用するには、
日本語のHTMLファイルを作成してから、その内容をb64encodeします。
iRuleから呼び出すとき、
上記pngと同様にb64decodeを利用。

とあったので、それを参考にしつつアクセスログも付加したiRuleを書いてみた。

class web_sorry_content {
   "*BASE64でエンコードした文字列*"
   }

class web_sorry {
 when HTTP_REQUEST {
   if { [active_members web_pool] < 1 } {
       HTTP::respond 200 content "[b64decode [lindex $::web_sorry_content 0]]" "Content-Type" "text/html"
           set LogString "Client [IP::client_addr]:[TCP::client_port] -> [HTTP::host][HTTP::uri]"
               log local0. "============================================="
               log local0. "$LogString (request)"
               foreach aHeader [HTTP::header names] {
                      log local0. "$aHeader: [HTTP::header value $aHeader]"
               }
               log local0. "============================================="
       }
}

web_sorry_contentにある「*BASE64でエンコードした文字列*」は、日本語表示を1行で改行も含めBase64に変更する。
たとえば、http://hogehoge.tk/tool/とかがいいかも。

4月 272010
 

CentOSでよく利用するYUMリポジトリの覚え書き。

デフォルトリポジトリ

# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#packages used/produced in the build but not released
[addons]
name=CentOS-$releasever - Addons
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=addons
#baseurl=http://mirror.centos.org/centos/$releasever/addons/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
# CentOS-Media.repo
#
# This repo is used to mount the default locations for a CDROM / DVD on
#  CentOS-5.  You can use this repo and yum to install items directly off the
#  DVD ISO that we release.
#
# To use this repo, put in your DVD and use it with the other repos too:
#  yum --enablerepo=c5-media [command]
#
# or for ONLY the media repo, do this:
#
#  yum --disablerepo=\* --enablerepo=c5-media [command]

[c5-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS/
        file:///media/cdrom/
        file:///media/cdrecorder/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

Continue reading »

4月 262010
 

Cactiインストールをやったのでメモっておく。環境はRedhat EL5 Update5でCactiをソースインストールし、SpineとPlugin Architectureを入れる予定。

Apache設定

/etc/httpd/conf/httpd.confの

DocumentRoot "/var/www/html" 
<Directory "/var/www/html">

を以下に変更

DocumentRoot "/var/www/cacti" 
<Directory "/var/www/cacti">

Mysql設定

/etc/my.ini に以下を追加

default-character-set = utf8
bind-address = 127.0.0.1
[mysql]
default-character-set = utf8

こんな感じになる

Continue reading »

4月 262010
 

Apacheにて複数のNamed Virtualサーバを運用しているが、ログをすべてシスログサーバに転送したく、方法を検討した。

ApacheではError_LogにてSyslogの指定が可能だが、ファシリティしか設定ができないし、アクセスログはSyslogの指定すらできない。

Rsyslogを使いたいので、本家の設定参考ページを確認したところ、どうやらパイプでプログラムに渡すしかないみたい。

PerlやCでプログラムを作ってもいいが、loggerコマンドがあるのでそれを使うことにした。処理の概要はこんな感じ。最後に処理を終了しているのは、システムログ(/var/log/syslogとか)にApacheログが書き込まれるのを防ぐため。

  1. Apacheはパイプでloggerを使いファシリティとタグを付けrsyslogに渡す
  2. rsyslogはファシリティとタグにより、保存するファイル先を選定する
  3. rsyslogはファシリティによりシスログサーバに転送する
  4. rsyslogはファシリティによりその処理を終了する

Apacheの設定はこんな感じ。

CustomLog "|/usr/bin/logger -p local1.info -t www.goodnai.com" combined
ErrorLog "|/usr/bin/logger -p local1.info -t www.goodnai.com-error"

local1をApacheで使うことにした。

rsyslogはこんな感じ

$template onlymsg,"%msg%\n"

if $syslogfacility-text == 'local1' and $syslogtag == 'httpd:' then /var/log/apache2/access.log;onlymsg
if $syslogfacility-text == 'local1' and $syslogtag == 'httpd-error:' then /var/log/apache2/error.log;onlymsg

if $syslogfacility-text == 'local1' and $syslogtag == 'domain1:' then /var/log/apache2/domain1.access.log;onlymsg
if $syslogfacility-text == 'local1' and $syslogtag == 'domain2-error:' then /var/log/apache2/domain1.error.log;onlymsg

if $syslogfacility-text == 'local1' and $syslogtag == 'domain2:' then /var/log/apache2/domain2.access.log;onlymsg
if $syslogfacility-text == 'local1' and $syslogtag == 'domain2-error:' then /var/log/apache2/domain2.error.log;onlymsg

if $syslogfacility-text == 'local1' and $syslogtag == 'www.goodnai.com:' then /var/log/apache2/www.goodnai.com.access.log;onlymsg
if $syslogfacility-text == 'local1' and $syslogtag == 'www.goodnai.com-error:' then /var/log/apache2/www.goodnai.com.error.log;onlymsg

if $syslogfacility-text == 'local1' then @192.168.0.10
if $syslogfacility-text == 'local1' then ~

domain1,domain2,www.goodnai.comってのが、複数運用しているVirtual hostになる。192.168.0.10はシスログサーバ。~(チルダ)でrsyslogの処理を終了している。