2012.02.19
Apacheのログファイルで特にアクセスログは、そのままではどんどん肥大化する。
それで、/etc/newsyslog.confに分割保存の設定をした。
newsyslog.confの最後に下の赤字の2行を追加。
# logfilename [owner:group] mode count size when flags [/pid_file] [sig_num]
/var/log/all.log 600 7 * @T00 J
/var/log/amd.log 644 7 100 * J
/var/log/auth.log 600 7 100 * JC
/log/httpd-access.log 644 12 * $M1D0 J /var/run/httpd.pid 30
/var/log/httpd-error.log 644 12 * $M1D0 J /var/run/httpd.pid 30
ログファイルの各設定の意味は、center>
logfilename |
/var/log/httpd-access.log |
ログァイルの場所。 |
[owner:group] |
|
普通はブランクで、rootになっている。 |
mode |
600, 644 |
ログァイルのパーミッション。 |
count |
7 |
ログァイルの世代数 |
size |
100, * |
ログファイルをローテイトする容量でKB単位。 なお*は容量を特に指定せず、時刻で切り替えるときに用いる。 |
when |
@T100, @01T05, $M1D0等 |
@T00 は、毎日午前 0:00 にローテーションさせると いう意味で、@01T05 は、毎日午前 1:05 に$W6D0 は、 毎週土曜日の午前 0:00 に$M1D0 は、毎月1日の 午前 0:00にローテーションさせるという意味になる。 |
flags |
J, JC, Z等 |
Jはbzip2で圧縮することを意味し、ファイルがないときに新たに生成するときはCを付ける(JCと表記)。また、 Bはバイナリーで、Zはgzipで圧縮する。 |
[/pid_file] |
/var/run/httpd.pid |
ログの切り出しを行った際にSIGNALを飛ばす先の プロセスのpidファイルを指定。 |
[sig_num] |
30 |
送信するSIGNAL で30はSIGUSR1。 ApcheはSignalを送らないと掴んだファイルを離さない。 |
2010.12.10
FreeBSD 8.1でapache22を入れると、/etc/rc.conf に下記の2行を入れる必要がある。
apache22_enable="YES"
apache22_http_accept_enable="YES"
従来、apacheXX_enable=”YES” の1行のみであったので、2行目を忘れがちである。
この2行目の指定で、accf_http.koとaccf_data.koのカーネルロードモジュールが読み込まれるが、これらは、Listen しているソケットに対して、 OS が固有に持っているプロトコルについての最適化を有効にするものとのことです。内容はよく理解していない。
そして、この2行目を忘れると、起動時に下記のエラーメッセージが出る場合があるので要注意だ。
「[warn] (2)No such file or directory: Failed to enable the ‘httpready’ Accept Filter」
2006.02.02
以前に1つのIPで2台のサーバを動かす方法を書いた。
一般的には、IPが1つもしくは2つで同一サーバ上で2つのドメインを扱う例は多いが、ここでは1つのサーバで物理的に2台のサーバへのアクセス方法についての試みの記述である。
ところが、サーバを新しく立ち上げ直したら、mod_proxyのmoduleが無く立ち上げられない事態に遭遇した。また、VirtualHost Directiveの書き方も追加修正が必要であることが分かった。
以下に方法を記すことにした。
当然あると思っていたmod_proxy.soが/usr/local/libexec/apache2に無く、既にstatic linkされているのかと思ったが、それも無い。
しかたが無いのでapache2をソースからコンパイルしてmoduleを得ることにした。
まず、ソースのダウンロードであるがダウンロードサイトのリストを見て適当なところから、httpd-2.0.55.tar.gz をダウンロードする。
次に展開してコンパイルするが、このときconfigureでproxyをsharedで指定してからコンパイルする。
# tar xvzf httpd-2.0.55.tar.gz
# cd httpd-2.0.55
# ./configure --enable-rewrite --enable-proxy=shared
# make
これで、modules/proxy/.libsの中にproxy関係のmoduleが
mod_proxy.so
mod_proxy_ftp.so
mod_proxy_connect.so
mod_proxy_http.so
の4つが出来るで、これを/usr/local/libexec/apache2内にコピーする。
# cd modules/proxy/.libs
# cp *.so /usr/local/libexec/apache2
これで、proxy関係のモジュールが得られたので、httpd.confを編集する。
まず、以下の2行の行頭の#を取り、proxy moduleをロードするようにする。
LoadModule proxy_module libexec/apache2/mod_proxy.so
LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so
さらに、httpd.confの最後に以下を追加。
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin hogehoge@uls.fam.cx
DocumentRoot /web/data
ServerName uls.flets.cds.ne.jp
ErrorLog /var/log/error_log
ProxyPass / http://192.168.1.6/
ProxyPassReverse / http://192.168.1.6/
</VirtualHost>
これで、apacheを再起動したら、私が使っている本来のドメイン名のuls.fam.cxでメインのサーバにアクセス出来、uls.flets.cds.ne.jpでアクセスすれば192.168.1.6のサーバにアクセス出来る。 出来るはずだった。
しかし、外部のproxy経由でアクセスしてみると、全て192.168.1.6に行ってしまう。
しばし、考えたが結局メインのサーバも以下のように追加で指定して解決した。
<VirtualHost *:80>
ServerAdmin hogehoge@uls.fam.cx
DocumentRoot /web/data
ServerName uls.fam.cx
ErrorLog /var/log/error_log
</VirtualHost>
Web関係だけであるが、簡単な設定でIPアドレスが1つでも2台以上のサーバが使えるので便利で素晴らしい。
2006.01.25
以前に.htaccessの仕様がapache2.0と2.1以降で異なるので2.0を使うと書いた。
しかし、将来を考えると何時までも古い版数のapacheを使い続けるのも問題なので、色々調べてみた。apacheのサイトのDocumentを読んだが分かり難いので、ここに自分の言葉で書いておくことにした。
ざっと、見たところ基本的な方針はrootになれる人は全てhttpd.confで設定すべきで、rootになれない人のために最低限許すとの考えで貫かれているようだ。
それで、いままで気安くAllowOverride Allなどと書いてたのが許されなくなったようだ。
1. htaccessを許す場合
もし、CGIの実行とユーザ認証をDocument Root内において.htaccessでの指定を許すなら(このケースが多いと思う) Document Rootのディレクティブで
AllowOverride Options AuthConfig
となる。 記述は実行名でなくカテゴリーなのが要注意で、ExecCGIではなくOptionsとなる。 そしてディれクティブ内の
# AddHandler cgi-script .cgi
のコメントアウトの#を除いて有効にする。
2. 全てhttpd.confで設定する場合(こちらが正統)
もし、rootで何時も設定するとの方針ならDocument Rootディレクティブで
Options Indexes FollowSymLinks ExecCGI
AllowOverride None
そして、認証を行うページ(仮にabcdとする)に対して新しいディレクティブを作り次のように記述する。
<Directory "/web/data/abcd"> ・・・・ /web/dataがDocument Rootのケース
AuthType Basic
AuthUserFile 設定ファイル
AuthName "メンバーのグループ名" ・・・これは好きな名前でよい
<Limit POST GET>
require valid-user
</Limit>
</Directory>
となる。
2005.11.10
Webページを開設すると、どれだけの人が見に来てくれるかが気になり、アクセスカウンターを付けたりするが、さらに進んでApacheのログファイルを解析して、統計情報を表示したくなる。
このような統計情報の解析・表示を行うソフトとしてAnalog(Analyze Logの略?)とかWebalizerなどが有名だが、最近ではAwstatsが表示もかっこ良く、6ケ国の言語の表示切り替え機能などを備え気に入って使っている。
そこで、FreeBSDの6.0を入れたので、あらためてAwstatsを入れることとした。
1. Apaceのログファイル形式の確認
Awstatsでログを解析させるには、ログファイルの形式が”combined”である必要がある。
common形式でもAwstatsの設定ファイルで選択できるが、十分な情報が得られなくなる。
Apacheのhttpd.confの記述を見ると、Defaultで下記のようにcombinedになっている。
しかし、Virtual Hostの設定などを行うと、commonになっているのでcommonをcombinedに修正する必要がある。
CustomLog /var/log/httpd-access.log combined
CustomLog /var/log/httpd-access.log common ← combinedに修正のこと
2. Awstatsのインストール
AwstatsはAWStats official web siteから最新安定版の6.4がダウンロードできるが、以前いれたときに日本語がかなりあやしく、明らかに日本語に強くない人が日本語訳をおこなったと思えるものであったため、ちゃんと日本語化された6.0版をAWStats 6.0完全日本語版のページからダウンロードした。
ダウンロードして展開し、wwwroot/iconの中身を/web/iconsにコピーし、wwwroot/cgi-binの中身を/web/cgi-binにコピーする。
# cd wwwroot/icon
# cp -r * /web/icons
# cd ../cgi-bin
# cp -r * /web/cgi-bin
これ以外にも、表示スタイルを変えるcssやjsのディレクトリーがあるが、これらはオプション機能のためのもので、今回はこれらは使わないことにした。
さて、次にcgi-binディレクトリーにコピーしたファイルでawstats.model.confを自分の環境に合わせて修正する。 このファイルはUTFで書かれているようなので、EUCに変換してから修正した。
なお、modelのところは自分のサーバのフルネームに変更する。
サーバ名が www.abc.co.jpだとすると、ファイル名は awstats.www.abc.co.jp.confとなる。
修正個所は
#LogFile="/var/log/httpd/mylog.log"
LogFile="/var/log/httpd-access.log"
SiteDomain="www.abc.co.jp"
#HostAliases="localhost 127.0.0.1 REGEX[myserver.com$]"
HostAliases="www.abc.co.jp 127.0.0.1 localhost"
#DirData="/var/lib/awstats"
#DirCgi="/awstats"
#DirIcons="/awstatsicons"
DirIcons="/icons"
#ShowFlagLinks=""
ShowFlagLinks="jp en fr de nl es"
#UseFramesWhenCGI=1
UseFramesWhenCGI=0
次に以下の内容のファイルを作り、awstats.cronとでも名前を付け、実行権を与えてcronで真夜中に呼び出してupdateするようにする。
cd /web/cgi-bin
/usr/bin/perl /web/cgi-bin/awstats.pl
-config=uls.fam.cx -update
後は、ブラウザからhttp://www.abc.co.jp/cgi-bin/awstats.plで見える。