2007年5月20日日曜日

Writing Apache2 Module in C/C++ その2

apxs2により、まずモジュールの雛形を作成します。
今回はモジュール名をcgiwebapp とします。

cd dev/apache2
apxs2 -g -n cgiwebapp
Creating [DIR] cgiwebapp
Creating [FILE] cgiwebapp/Makefile
Creating [FILE] cgiwebapp/modules.mk
Creating [FILE] cgiwebapp/mod_cgiwebapp.c
Creating [FILE] cgiwebapp/.deps

という具合に雛形が作成されます。このままでもコンパイルは通るので、
Makefileの、top_srcdirを、
top_srcdir=/usr/share/apache2
としておきます。
(make install時のbuildスクリプトのため)
apxsもapxs2にしておきます。

make
sudo make install

とやると、mod_cgiwebapp.so が/usr/lib/apache2/modulesにコピーされます。

/etc/apache2/apache2.confに
LoadModule cgiwebapp_module /usr/lib/apache2/modules/mod_cgiwebapp.so
を追加し、
/etc/apache2/site-avaliable/defaultの<virtualhost>内に、
<location>
SetHandler cgiwebapp
</location>

と書きます。

その後、apache2をリスタートし、
http://colinux/cgiwebapp
とやると、
The sample page from mod_cgiwebapp.c
が表示されて、ひとまず動作確認完了

Writing Apache2 Module in C/C++ その1

Apache2のモジュールを開発します

なぜかというと、以前apache1.3系のモジュールを作ったので、それを
apache2に書きなおしたいというわけです。
そのモジュール自体はかなり機能豊富でしたが、まずは通常のCGI-Webアプリとして
使い物になる程度まで仕上げたいと思います。

メモを残しつつ、多少時間がかかると思いますが完成させたいと思います。

というわけでまずは開発環境。
colinux上に、apache2、apache2-mpm-prefork、apache2-prefork-devをインストールします。threadモデルでやりたいところですが、モジュールをスレッドセーフにかける自信がないので、preforkで開発します。

sudo apt-get install apache2-mpm-prefork
sudo apt-get install apache2
sudo apt-get install apache2-prefork-dev

モジュールのルートディレクトリを作成。今回は
~/dev/apache2/
とします。

mkdir dev/apache2/

続く

2007年5月19日土曜日

colinuxによる開発環境の構築

仕事とは別に
自分の好き勝手にできる開発環境が欲しかったのでcolinuxをwindows xp上に構築してみました。

実行速度は申し分ないです。
Debianを入れましたが、他のディストリビューションでもインストール可能のようです。
インストール方法などは

http://aoineko.ciao.jp/text/colinux/colinux.html
http://www.si-linux.co.jp/wiki/silinux/index.php?CoLinux

を参考にさせていただきました。

付属でダウンロードしたDebianのディスクイメージだと1GBとさすがに少ないので
自分の環境では4GBに変更してあります。

仕事のサーバがDebianなので、Debianの勉強などにはもってこいですね。
クリーンインストールした状態のデータをバックアップしておくと、
ぶっ壊してもいつでも復活できます。このあたりがすばらしい!

2007年5月17日木曜日

Apache2のmoduleのon/off

DebianでのApache2のmoduleのon/off

パッケージから入れた場合、
/usr/sbin/a2enmod
/usr/sbin/a2dismod
を使用する

mod_rewriteを例にとると
onにする場合:
sudo a2enmod rewrite
sudo /etc/init.d/apache2 force-reload

offにする場合:
sudo a2dismod rewrite
sudo /etc/init.d/apache2 force-reload

ソースから入れた場合、あるいはモジュールだけソースからコンパイルした場合は
例によって、
LoadModule php5_module modules/libphp5.so
のようです。
Debianでモジュールを入れる場合はパッケージでそろえた方が管理が楽でいいですね。

ApacheのRewriteMap

Apacheのmod_rewriteのRewriteMapについてのメモ

今回は
http://q.hoge.com/ を http://www.hoge.com/sub/123/
にrewriteする。
単純なテキストファイルを用意
/home/qootaro/rewritemap/map.txt

形式はキー<スペース>値
なので
q.hoge.com 123
として保存

rewriteの設定は以下のとおり

RewriteEngine on
RewriteLog /var/log/apache2/rewrite.log
RewriteLogLevel 9
RewriteMap submap txt:/home/qootaro/rewritemap/map.txt
RewriteCond %{HTTP_HOST} q.hoge.com
RewriteRule /(.*) http://www.hoge.com/sub/${submap:%{HTTP_HOST}}/ [L]

もちろん、これはサブドメイントップ以下のページを全部同じ
URLにrewriteしてしまうので、本来は通常のIDが含まれたURLだけど、特定のIDのページだけサブドメインに割り当てたい というような時に使用できると思います。
(それ以外は実用性ゼロw)

Web開発のメモ

今までちゃんとまとめた事がなかったので
このブログで調べたことなどをまとめます