Apache1.3のmod_proxyで否定の”!”を無理やり利用する
リバースプロキシーを設定する際、
Apache2系以降では使えるが、apache1.3ではmod_proxyのProxyPass否定形が使えない。
Apache2系の場合には使える
-
ProxyPass /mirror/foo/i !
-
ProxyPass /mirror/foo http://backend.example.com
Apacheのバージョンアップなども諸事情で困難な場合、
Apache1.3内のCのファイルを書き換えることで一応対応できる。
(苦し紛れ対応だが)
▼前提条件
・Apache1.3.37の場合(多少違うバージョンでも動作可能と思われます)
・Apache1.3.37が /usr/local/apache にインストールされている場合
・Apacheのソースが/usr/local/src/apache_1.3.37/にある場合
・DSO(mod_so)が組み込まれている場合
▼修正方法
-
vi /usr/local/src/apache_1.3.37/src/modules/proxy/mod_proxy.c
※『static int proxy_trans』にApache2系のmod_proxyに記載されているif文を追加する。
※以下はdiffの結果です。
-
*** mod_proxy.c.orig 2011-05-23 20:58:11.000000000 +0900
-
— mod_proxy.c 2011-05-23 20:58:57.000000000 +0900
-
***************
-
*** 158,163 ****
-
— 158,167 —-
-
len = alias_match(r->uri, ent[i].fake);
-
-
if (len > 0) {
-
+ if ((ent[i].real[0] == ‘!’ ) && ( ent[i].real[1] == 0 )) {
-
+ return DECLINED;
-
+ }
-
+
-
r->filename = ap_pstrcat(r->pool, "proxy:", ent[i].real,
その後、インストールをすると適応されます。
-
cd /usr/local/src/apache_1.3.37/src/modules/proxy
-
/usr/local/apache/bin/apxs -c *.c
-
/usr/local/apache/bin/apxs -i mod_proxy.so