apahceモジュール入門

apacheモジュールとは
apacheに付加的な機能を追加できる。というかapacheの大半の機能はモジュールで実現されている。
C言語で書くことができ、余分な処理が走らないため
PHP,Perlなどで書くCGIより一般的に高速に動作する。
↓詳細
http://labs.yumemi.co.jp/labs/mod/apache_module.html


apacheモジュールを作成するにはroot権限が必要。
手軽にやるならVMwarelinuxインストールがよい。(バックアップ取りやすいし)
最近ならVPS借りるという選択肢もある。


apacheモジュールの開発環境を作る

yum を使ってapache-develとか開発に必要なパッケージをインストール
Apacheモジュールの作り方(2.x系)
yumはパッケージ管理ソフト。apt-get(macだとmacPorts,Homebrewとか)
と同様コマンドを打つだけで依存関係とか考慮しながらインストールしてくれる。


サンプルプログラムの作成

以下のコマンドでテンプレを作成できる。
/usr/sbin/apxs -g -n hellow_world


モジュールの組み込みは、静的リンクと動的リンクがある。動的リンクはテンプレにあるMakefileが使える。
*動的リンクするにはmod_soというモジュールを組み込む必要がある。
モジュールの確認は/usr/sbin/apachectl -l とか/usr/sbin/apachectl -Mを実行
↓詳細
apxsでapacheにモジュールを追加する
mod_soが無いときはapacheを ./configure --enable-module=so でリビルドする必要があるとか(未確認)


サンプルプログラムの実行
動的リンクができる環境では、
テンプレを展開したフォルダでmake installでビルドしてくれる。
環境によっては、設定までしてくれるが自分の場合は手動でやる必要があった

以下のapacheの設定ファイル↓を編集する
/etc/httpd/conf/httpd.conf

サンプルモジュールの読み込みを追加
LoadModule helloworld_module modules/mod_helloworld.so


http://サーバーのIP/hello、でサンプルで作成したモジュールを実行するようにする。

SetHandler helloworld

apacheを再起動する。
/etc/rc.d/init.d/httpd restart


http://サーバーのIP/hello、にアクセスすると
The sample page forom mod_helloworld.cと表示される。


apache再起動時に以下のエラーメッセージが出た場合
Could not reliably determine the server’s fully qualified domain name,
↓参照のこと
http://d.hatena.ne.jp/uriyuri/20100511/1273575287


apacheの設定について
DocumentRoot、/var/www/html/をみんなで使うのはセキュリティ的に問題なので、
ユーザーディレクトリを使えるようにする。↓詳細
TIPS集:Webサーバ(Apache) 『ユーザホームページを公開するには?(その1:"~"チルダ付き)』 - はじめての自宅サーバ構築[kajuhome.com]
FTPでの基本的なユーザー権限・パーミッションについて

httpd.confを以下の感じに編集するとのこと。

  コメントアウトする
  #UserDir disable
  UserDir public_html


apacheモジュールでファイルの読み書きをする。
apr_file_openを使う。
http://dev.ariel-networks.com/apr/apr-tutorial/html/apr-tutorial-5.html
※ファイル書く時にディレクトリに権限与えておかないと、書き込めないので要注意!

http://sb.xrea.com/showthread.php?t=10447

apacheモジュールでPOSTメッセージを受け取る

char post_buf[100];
int post_write_size = 100;
memset(post_buf,0,100);

ap_setup_client_block(r,REQUEST_NO_BODY);
ap_should_client_block(r);
ap_get_client_block(r,post_buf,post_write_size);

参考サイト
https://www.codeblog.org/blog/inoue/200612.html
http://kilrey.com/c-lang/apache/post.html



よく使うapache関連のディレクト
ログ
/etc/httpd/logs
設定ファイル
/etc/httpd/conf/httpd.conf
起動の時などに使用
/usr/sbin/apachectl
起動の時に使用、サーバー起動時に実行される場所
/etc/rc.d/init.d/httpd


参考サイト
apacheモジュールに詳しいサイト
http://dsas.blog.klab.org/archives/50574774.html
apacheの起動系コマンド
http://www.jitaku-server.net/apache_start.html
emacsのコマンド
http://www.unixuser.org/~euske/doc/emacsref/#cutcopydel
c++apacheモジュール
http://blogs.yahoo.co.jp/take_low_6/23875145.html


まとめ
apacheモジュールはapacheの深い所の知識も学べるため非常に面白い。
特に高速化手段を考えなくても十分早く動くのも魅力的。
最近はVPSを使えばrootが使えるようになったので、前より楽に使えるようになったと思います。


apacheインテルコンパイラーでビルドするとさらに高速化できるとの話もあるので、
モジュールと含めてためしてみるのも面白いかもしれません。
http://nex.xrea.jp/?s=180
intel compiler で Apache が 400% 高速化 - drk7jp