老版本apache模拟2.2.5中出现的ProxyPassMatch

反向代理是webserver和appserver结合的通用解决方案。apache提供了mod_proxy,mod_proxy_ajp来干这个事情。另外还有应用服务器方提供的mod比如mod_jk,mod_wl等。

使用mod_jk的同学估计对ajp又爱又恨吧?因为ajp不支持regex方式来代理动态请求。其实关于各种反向代理模块,配置的灵活性、性能,都是需要权衡的。不使用mod_jk的同学又希望有一款模块能够灵活的配置,现在apache2.2.5给mod_proxy新增了一个ProxyPassMatch指令,可以试试。

 

这篇文章主要是给那些暂时不能使用apache2.2.5的同学看的。估计很多人应该知道mod_rewrite中的RewriteRule指令中[P]标识,是用来加强ProxyPass的。但是rewrite拍脑袋想一下应该是对webserver有性能上的消耗的。这里我试图给出一个目前我能想到的最灵活也兼顾性能的配置方案:

 

 

#global disable rewrite
RewriteEngine off

<LocationMatch "^/context/(.*)\.(jsp|action|do)$">
        #per-dir enable rewrite
        Options +FollowSymLinks
        RewriteEngine on
        RewriteRule ^/YourWebserverDocumentRoot/(.*) http://appserver:port/$1 [P,QSA,L]
</LocationMatch>
 

 

 

只是,apache文档中说:

Although rewrite rules are syntactically permitted in <Location> sections, this should never be necessary and is unsupported.

 

有谁能够给我解惑?我现在只能假设,对于每一个请求,LocationMatch匹配是快于RewriteRule匹配的。但能想象,上面这个配置,若匹配到URI,至少有两次匹配过程。有时间做一个测试来验证。

 

我其实并不推崇这种rewrite的技巧,同时也对java web应用的特定扩展名感到厌烦了。如果能够更合理的组织URI,ajp肯定是更合理的方案。

你可能感兴趣的:(apache,应用服务器,jsp,Web)