return to SSR TOP
return to Daemon Lab TOP

Apacheのバグ


Apache 1.3.26以降にバージョンアップすればよし、以下の文章に微塵の価値も無い。 2/9追加しました

概要

Apacheのmod_proxyにバグらしきものを発見しました。 状況はFreeBSD 4.4にソースで入れたものです。
(ってか1/24日リリースで1/25日にインストールだからソースしかなかった)
バグの内容というのはプロクシ越しだとクッキーが使えなくなるというものでした。

とりあえずの回避方法

下記のdiffの結果をダウンロードしたソースのsrc/module/proxy/proxy_http.cに当ててください。

530c530,541
<     ap_overlap_tables(r->headers_out, resp_hdrs, AP_OVERLAP_TABLES_SET);
---
>     /*ap_overlap_tables(r->headers_out, resp_hdrs, AP_OVERLAP_TABLES_SET);*/
>     /* This is workaroud for Cookies (By Akira Noda http://rogiken.org/daemon/ */
>     
>     reqhdrs_arr = ap_table_elts(resp_hdrs);
>     reqhdrs_elts = (table_entry *) reqhdrs_arr->elts;
> 
>     for (i = 0; i < reqhdrs_arr->nelts; i++) {
>     ap_table_addn(r->headers_out,
>                     reqhdrs_elts[i].key ,reqhdrs_elts[i].val);
>     }
>     /* end of fix by akira noda*/
> 
ここからダウンロードできます

詳しい内容

夜中の11時にあれ?おかしいなって気が付いてそれから生まれてアパッチのソースを 見て、パッチをつくるなんてことしてたら。もう朝・・・
てなわけで、眠いので後ほど・・・そのうち更新します

とりあえずロ技研ではまともにそのApacheがプロクシサーバとして動いてます


2/9追加

詳しい内容

Apacheのmod_proxyでは、リモートサーバ(HTML文書を持っているサーバ)のヘッダと、 自分が加えたい、ヘッダと、ほかのモジュールが追加するヘッダをマージしてから出力するようになっています。
そこで問題が起きるのがリモートサーバから受信したデータをクライアントを時です。 下記のように、重複した種類のヘッダがあると、最後の一つしか送られないようになるのです。
Via: my.proxy
Content-Type: text/html
Set-cookie: y=〜〜〜〜
Set-cookie: y=〜〜〜〜
というのがヘッダに含まれているとすると、
Via: my.proxy
Content-Type: text/html
Set-cookie: y=〜〜〜〜
このように、最後の一つだけになってしまうのです。
これは、最後にヘッダをマージするときにap_overlap_tablesを用いているためだと考えられます。そこで、私はそこのところをヘッダの重複を気にしないで、マージするように書き換えました。

結果

とりあえず、2/9現在までうまく動いてるからこのパッチでOKっぽいですね。
まぁ〜終わったことはきにしな〜い