Apache::ClickPath で Cookie を使わずにユーザーを Tracking の続き [Linux]
やりました。
ついにできました。
苦労したかいがあった!
ちなみに、どんな風になるかというと、
apach の access_log に session 情報が記述されます。
具体的に見てみると、
192.168.1.1 - - [06/Jan/2005:16:28:14 +0900] 304 - "" -> "GET / HTTP/1.1"
"Don't hack me ...." "9XtNsN:dq,1wtNNYNjUltNNNNNM"
※Logformat は以下のようにしてる場合です。 "%h %l %u %t %>s %b \"%{Referer}i\" -> \"%r\" \"%{User-Agent}i\" \"%{SESSION}e\"" |
httpd.conf の CustomLog に %{SESSION}e と書けばいいんです。
最後の 「9XtNsN:dq,1wtNNYNjUltNNNNNM」 が session 情報というわけです。
これで NAT された環境から複数の人が access にきても、
誰がどこをみたのか分かるんですよ。ええ。
まぁそれだけなんですけどね。
さて、やり方ですけど、、、、、、
かなり Gentoo の掟破りをしていると思いますので、あんまり参考になるかわかりませんが
一応備忘録として書いておきます。
導入しておかしくなっても知りません。(無責任)
自作 mod_perl-2.0.0.ebuild
まずやるべきことは PORTDIR_OVERLAY を指定することです。
/etc/make.conf の PORTDIR_OVERLAY=/usr/local/portage の記述がコメントアウトされていたら#を外してください。
その次に
mkdir -p /usr/local/portage/dev-perl/mod_perl |
mod_perl の 2.0.0 じゃないと駄目なので自分で ebuild を作らないといけません。
(まだ portage に入ってないみたい)
というわけで既存の ebuild をコピーしてきましょう。
cd /usr/local/portage/dev-perl/mod_perl
cp -p /usr/portage/dev-perl/mod_perl/mod_perl-1.99.17-r1.ebuild ./mod_perl-2.0.0.ebuild |
mod_perl-1.99.17-r1.ebuild を雛型にして新しい 2.0.0 を作ります。
cp したやつを3箇所ほどいじります。
vi mod_perl-2.0.0.ebuild
・back=\_${PV##*\.} を back=\.${PV##*\.} に変更 ・MY_P=${PN}-${MY_PV} を MY_P=${PN}-${MY_PV}-RC3 に変更 ・epatch ${FILESDIR}/${PN}-1.99.16-sneak-tmpdir.patch をコメントアウト |
※ MY_P の部分は http://perl.apache.org/dist/ を確認してから決めてください。自分がやったときは mod_perl-2.0.0-RC3.tar.gz があったのでそれを使いました。
さて、これだけでは emerge できません。digest を作ります。
(FEATURES="digest" が無い人)
ebuild mod_perl-2.0.0.ebuild digest |
これで compile の準備が整いました。
その前に、mod_perl の 1.2.X とか入ってると compile でエラーになるのでunmerge しといてください。
emerge unmerge dev-perl/mod_perl |
もともと入ってない人は飛ばして構いません。
では emergeしましょう。
ACCEPT_KEYWORDS="~x86" emerge -vp ">=dev-perl/mod_perl-2.0.0" |
で確認して、OKだったら -vp を -v にして emerge してください。
Apache::ClickPath
ebuild 作ったんだけど上手く動かなかった・・・
原因は configure のところで perl の library の PATH が足りないことだって
わかってるんですけど・・・
ebuild でどういう風に修正したらわからず。
結局 ebuild ではなく手動でインストール
Apache-ClickPath-1.0.tar.gzを落として解凍してください。
perl -I/usr/lib/perl5/vendor_perl/5.8.5/i686-linux-thread-multi/Apache2 Makefile.PL
make make install ※Include は各自の環境に変えてくださいね |
でOK!!
Apacheの設定
Gentoo の Apache は結構管理が変わってて(自分にとっては)理解するのに
時間がかかります・・・
さて、まずは /etc/conf.d/apache2 を編集します。
APACHE2_OPTS="-D PERL" |
上記のようにします。自分の場合は PHP も入ってるので実際には
APACHE2_OPTS="-D PHP4 -D PERL" になってます。
Gentoo は -D PERL とすることで mod_perl が Apache に
読み込まれるような httpd.conf になってるようです。
その次に /etc/apache2/conf/modules.d/75_mod_perl.conf を変更します。
vi /etc/apache2/conf/modules.d/75_mod_perl.conf
<IfModule mod_perl.c> 内の PerlRequire "/etc/apache2/conf/modules.d/apache2-mod_perl-startup.pl" をコメントアウトしてください。 そしたら続いて <IfModule mod_perl.c> の中に PerlModule Apache2 PerlLoadModule Apache::ClickPath <ClickPathUAExceptions> Google Googlebot MSN msnbot Mirago HeinrichderMiragoRobot Yahoo Yahoo-MMCrawler YahooSlurp http://help\.yahoo\.com/help/us/ysearch/slurp Livedoor livedoorCheckers Globalspec Ocelli Naver NaverBot IBM http://www\.almaden\.ibm\.com/cs/crawler/ </ClickPathUAExceptions> ClickPathSessionPrefix "-S:" ClickPathMaxSessionAge 18000 PerlTransHandler Apache::ClickPath PerlOutputFilterHandler Apache::ClickPath::OutputFilterと書いてください |
次に /etc/apache2/conf/commonapache2.conf を編集します。
LogFormat の部分で表示させたい場所に 「%{SESSION}e」を追記してください。
ちなみに自分は以下のようになってます。combined で log に書いてます。 LogFormat "%h %l %u %t %>s %b \"%{Referer}i\" -> \"%r\" \"%{User-Agent}i\" \"%{SESSION}e\"" combined |
これで Apache を再起動すればOKです。
この ClickPathUAExceptions で指定すれば、特定のものからの access 時に
SESSION の値を決められるようです。
Googlebot が来れば Google に、msnbot が来れば MSN になるようです。
User-Agent で判断してるっぽい。
さて、これで本家の mod_perl-2.0.0 が出るまでは凌げそうです。
まぁ本家のが出てきたらさっさと入れ替えます。
それまでのつなぎということでお願いします。
コメント 0