ラベル apache の投稿を表示しています。 すべての投稿を表示
ラベル apache の投稿を表示しています。 すべての投稿を表示

2014年3月3日月曜日

apacheのコンテンツハンドラ

コンテンツハンドラとは?
要求されたURIの拡張子や設置場所に応じた処理方法

コンテンツハンドラを特定の拡張子に対して設定する場合は、設定ファイルで
AddHandlerディレクティブを使用する。

拡張子.shtmlのファイルをSSIを実装したserver-parsedハンドラで処理する場合。
AddHandler server-parsed .shtml
拡張子.CGIをCGIスクリプトとして、cgi-scriptハンドラで処理する場合。
AddHandler cgi-script .cgi

コンテンツハンドラは拡張子だけでなく、URIに対しても設定できる。
実体を持たない仮想的なURIへのリクエストに応じて起動するコンテンツハンドラの
設定が可能。
SetHandler helloworld

apacheモジュールで管理するプール

Apacheはリソースを管理するプールという構造を持つ。
主に4つある。
Apacheが生成するプール

  • Serverプール
    Apacheの起動時に生成し、終了する時に破棄されるプール。
    例えば、データベース接続や全体で使用する設定情報などは、これを当てはめる。
  • Connectionプール
    クライアントが接続された時に生成され、切断されると破棄される。
  • Requestプール
    レスポンスが受信から送信の間に生成される。
一度のコネクションで複数のリクエストを送るクライアントの場合は、Connectionプールが一つ生成され、その間に送信されるリクエストの数だけのRequestプールが生成/破棄されます。
プログラマーが生成するプール

  • Subプール
    プログラマが任意のプールから生成して破棄できます。

2014年3月2日日曜日

apache moduleを作成(リダイレクト)

apxs -g -n redirect_test
Creating [DIR]  redirect_test
Creating [FILE] redirect_test/Makefile
Creating [FILE] redirect_test/mod_redirect_test.c
リダイレクトするための内容
static int redirect_test_handler(request_rec *r)
{
  ap_table_set(r->headers_out, "Location", "http://yahoo.co.jp");
  return REDIRECT;
}
make
make install
/usr/local/apache/bin/apachectl stop
/usr/local/apache/bin/apachectl start
vi /usr/local/apache/conf/httpd.conf
Location /redirect_test SetHandler redirect_test /Location

2014年2月27日木曜日

apache moduleを作成(出力できる項目を確認してみる)

 pwd
/home/joji/apache_module
apxs -g -n reqinfo
Creating [DIR]  reqinfo
Creating [FILE] reqinfo/Makefile
Creating [FILE] reqinfo/mod_reqinfo.c
  vi /usr/local/apache/conf/httpd.conf
こちらを追記(locationタグを新たに作成して下さい。本来は<>でくくります。)
Location /hello
  SetHandler reqinfo
/Location
vi /home/joji/apache_module/reqinfo/mod_reqinfo.c
/*
r->header_only
HEADやOPTIONSメソッドなど、ヘッダだけを要求するリクエストの場合は
header_onlyフィールドに真がセットされる。
GETやPOSTなど、コンテンツを要求するリクエストの場合はfalseがセットされます。
*/
static int reqinfo_handler(request_rec *r)
{
    r->content_type = "text/html";
    ap_send_http_header(r);
    /*if (!r->header_only)
      return OK;*/
    ap_rputs("\n", r);
    ap_rprintf(r, "URI: %s\n", r->uri);
    ap_rprintf(r, "Query String: %s\n", r->args ? r->args : "" );
    ap_rprintf(r, "Client Host: %s\n", r->connection->remote_ip);
    ap_rputs("", r);

    return OK;
}
cd /home/joji/apache_module/reqinfo
make
make install
このURLにアクセスすると http://192.168.12.5:8080/reqinfo?helloworld このように表示されます。 URI: /reqinfo Query String: helloworld Client Host: 192.168.12.3

2014年2月16日日曜日

apache moduleを作成(hello world)

  pwd
/home/joji/apache_module
  apxs -g -n helloworld
Creating [DIR]  helloworld
Creating [FILE] helloworld/Makefile
Creating [FILE] helloworld/mod_helloworld.c
  cd /home/joji/apache_1.3.42
静的なインストール
  ./configure --add-module=/home/joji/apache_module/helloworld/mod_helloworld.c 
  make
  make install
  vi /usr/local/apache/conf/httpd.conf
こちらを追記(locationタグを新たに作成して下さい。本来は<>でくくります。)
Location /hello
  SetHandler helloworld
/Location
URLにアクセスすると
http://192.168.12.5:8080/hello
以下のように表示されます。
The sample page from mod_helloworld.c
動的なインストール
cd /home/joji/apache_module/helloworld
make
この二つのファイルが作成されます。
mod_helloworld.o  mod_helloworld.so
make install
cat /usr/local/apache/conf/httpd.conf | grep Load
LoadModule helloworld_module  libexec/mod_helloworld.so

scientific linuxにApache1.3.42をインストール

  sudo yum -y install sudo yum -y install gcc-c++
  wget http://archive.apache.org/dist/httpd/apache_1.3.42.tar.gz
  tar xvzf apache_1.3.42.tar.gz 
  cd /home/joji/apache_1.3.42
  ./configure --prefix=/user/local/apache --enable-module=so
  make
エラーが発生する htpasswd.c:101: error: conflicting types for ‘getline’
sed -i 's/getline/apache_getline/' src/support/htdigest.c
sed -i 's/getline/apache_getline/' src/support/htpasswd.c
sed -i 's/getline/apache_getline/' src/support/logresolve.c
  make
  make install
apacheスタート
  /user/local/apache/bin/apachectl start
portの確認
   netstat -antp
これが表示されてればOK tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1932/httpd
他のサーバーから見る際には8080ポートの解放を忘れずに。
 RPMでhttpdが入っていたら、そっちは紛らわしいので削除する。
  rpm -qa | grep httpd
  rpm -e --nodeps httpd-2.2.15-26.sl6.x86_64
  rpm -e --nodeps httpd-tools-2.2.15-26.sl6.x86_64

なお、権限の問題が発生したら、とりあえず以下のコマンドで。(ここで扱う話題とは別の話のため)
chmod -R 777 /user/local/apache