APACHE

Handler vs. Rack on Passenger

先日、アクセスを記録するだけの簡単なWebアプリを作ろうとして同僚のTさんに相談したところ「素のRackアプリがおすすめですよ〜」とのコメントをいただいた。 なんとなくmod_rubyでApacheのHandlerとして実装してしまうのがいいかな…と考えていたのだが、趣…

S3をApacheのファイルシステムとして利用する

mod_rubyでさくっと実装してみた。 /usr/lib/ruby/1.8/apache/s3.rb require 'base64' require 'net/http' require 'openssl' require 'singleton' require 'time' Net::HTTP.version_1_2 module Apache class S3 include Singleton BucketName = "my_bucket…

ApacheのログをTokyoCabinetに吐く(いい加減な実装)

そろそろKVSを本格導入したいなーと思ったので、TokyoCabinetを少しさわってみた。 とりあえず、DSASの中の人が公開しているmod_syslogを改変して、テーブルデータベースにログを出力するモジュールを、ものすごくいい加減に実装。 #include "apr_hooks.h" #…

mod_substitute.c

http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/filters/mod_substitute.c?view=markup なんだこのフィルタのチュートリアルは? と、思うくらい分かりやすい。 しかし、やりたいことは単純なのに、この複雑さ。絶望的だ。

svn_string.c

http://svn.collab.net/repos/svn/trunk/subversion/libsvn_subr/svn_string.c APRのメモリプールを使って、Stringを実現しようとしている…ように見える。 apr_preallocってないのか…古いメモリは破棄できないのかな?

APLOG_NOERRNO

/* APLOG_NOERRNO is ignored and should not be used. It will be * removed in a future release of Apache. */ #define APLOG_NOERRNO (APLOG_LEVELMASK + 1) なるほどなるほど。

mod_digikoつくった

http://storehouse.quickvps.net/aozora/cards/000148/files/752_14964.html 文字列置換はめんどくさいなぁ… 設定 LoadModule digiko_module /usr/lib/apache2/modules/mod_digiko.so <Location /aozora> SetOutputFilter DIGIKO ProxyPass http://www.aozora.gr.jp ProxyPassR</location>…

Apache 2.0 Filters

http://www.apache.org/~gregames/ap2filters.ppt

フィルタの勉強: Content-Length

Content-Lengthを設定し直さないと…と思ってhttpd-2.2.8/modules/filters以下のソースにgrepをかけてみる。 mod_charset_lite.c:845: * Content-Length since it is unlikely to remain the same. mod_charset_lite.c:847: apr_table_unset(f->r->headers_ou…

フィルタの勉強: ブリッジの回し方とAPI

バケットを詰め替える場合 while (!APR_BRIGADE_EMPTY(bb)) { apr_bucket *e = APR_BRIGADE_FIRST(bb); if (APR_BUCKET_IS_EOS(e)) { // APR_BUCKET_IS_EOCはなくなったよう // ストリームの終端 APR_BUCKET_REMOVE(e); APR_BRIGADE_INSERT_TAIL(bbout, e); …

フィルタの勉強: バケットの分割

バケット(ブリッジではない)の分割にはapr_bucket_split(e)を使う。 apr_bucket_split(a)の実体(のひとつ?)。 APU_DECLARE_NONSTD(apr_status_t) apr_bucket_simple_split(apr_bucket *a, apr_size_t point) { apr_bucket *b; if (point > a->length) { …

フィルタの勉強: フィルタの呼び出しとストリームの終わり

static apr_status_t hogehoge_filter(ap_filter_t *f, apr_bucket_brigade *bb) { request_rec *r = f->r; my_ctx *ctx = f->ctx; いくつかのフィルタのコードを読んでみると、どうも一回のフィルタの呼び出しではストリームが終わらないことがあるらしい。…

PPT: Bucket Brigades: Data Management for Apache 2.0

http://www.cs.virginia.edu/~jcw5q/talks/apache/bucketbrigades.ac2002.ppt

link:Connecting middleware to Apache 2.0

http://www.ibm.com/developerworks/linux/library/l-apache/?loc=dwmain

link:bucketとbrigadeの説明

https://www.codeblog.org/blog/inoue/20060510.html このサイトを頭から読んでるけど、ものすご〜く参考になる。

フィルタの勉強

モジュールの宣言 1|module AP_MODULE_DECLARE_DATA foo_module = { 2| STANDARD20_MODULE_STUFF, 3| foo_dir_config_creater, /* dir config creater */ 4| NULL, /* dir merger --- default is to override */ 5| NULL, /* server config */ 6| NULL, /* m…

link: 開発関連

いろいろ見つけたのでメモ。 mod_deflate.c Apache ドキュメント 2.2.4 はじめてのフィルタ 井上の日誌 -Apacheの話- ディレクティブの処理と設定値の利用 (apache module 開発事初め その3) 可変長引数マクロ(ap_log_error引数多すぎ) ap_log_error

link: 開発関連 その2

output_filterで出力を覗き見してみようよ - ひげぽん OSとか作っちゃうかMona- mod_trimxml - daily dayflower

何もしないフィルタ

#include "httpd.h" #include "http_config.h" #include "http_protocol.h" #include "ap_config.h" static apr_status_t test_out_filter(ap_filter_t *f, apr_bucket_brigade *bb) { ap_remove_output_filter(f); return ap_pass_brigade(f->next, bb); } …