开发环境中的Apache
假设:项目需要做 URL Rewrite,不想用 UrlRewriteFilter 集成到应用程序里去,于是就选用一些 Web Server 来做,后来选了 Apache,但是又懒,不想每台开发机器都去做配置,因为确实很麻烦,规则变了又要每台开发机器都去同步,如果是 Linux 还好一点,可以 mount 一下。
有四台开发机器,IP 分别为:
192.168.1.10(Apache)
192.168.1.20(A同事)
192.168.1.30(B同事)
192.168.1.40(C同事)。
在192.168.1.10上部署一个 Apache,做 Rewrite 规则,然后统一分发到另外三台机器上。可是每位同事的开发机器上的项目的版本有可能不一致,而且还要根据各自手头上的版本来调试。
也就是说:A同事启动了应用程序,请求192.168.1.10的 Apache,享受了一了Rewrite 规则,然后被分发回A同事的 Tomcat
既然这样,每位同事都要弄个标识才行,端口是不错的选择:
A同事:1020
B同事:1030
C同事:1040
OK,标识分好了,就开始做配置了,Apache 的版本采用2.2,结合几个Module:
mod_rewrite
mod_proxy
mod_proxy_ajp/mod_proxy_http
在 make/make install Apache 前的 configure 加入几个参数:
./configure --enable-rewrite --enable-proxy --enable-proxy-ajp --enable-proxy-http
到 httpd.conf 了,当然少不了的是把 Module 们 load 进来:
LoadModule proxy_module modules/mod_proxy.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
把几位同事对应的端口也配进去:
#A同事
Listen 1020
#B同事
Listen 1030
#C同事
Listen 1040
既然每位同事都有一台开发机器,那么就给他们每人多配一台虚拟机器吧:
#A同事
<VirtualHost *:1020></VirtualHost>
#B同事
<VirtualHost *:1030></VirtualHost>
#C同事
<VirtualHost *:1040></VirtualHost>
差点忘了proxy,Oops。都配上 mod_proxy_ajp 吧,免得麻烦。
在这个时候,C同事的孩子气来了,他说他一定要 mod_proxy_http,。。。。。
#顺被带上RewriteRule
#A同事
<VirtualHost *:1020>
ProxyPass / ajp://192.168.1.20:8009/
ProxyPassReverse / ajp://192.168.1.20:8009/
RewriteEngine On
#RewriteRule... ...
</VirtualHost>
#B同事
<VirtualHost *:1030>
ProxyPass / ajp://192.168.1.30:8009/
ProxyPassReverse / ajp://192.168.1.30:8009/
RewriteEngine On
#RewriteRule... ...
</VirtualHost>
#C同事
<VirtualHost *:1040>
ProxyPass / http://192.168.1.40:8080/
ProxyPassReverse / http://192.168.1.40:8080/
RewriteEngine On
#RewriteRule... ...
</VirtualHost>
个人感觉 mod_proxy 的风格比 mod_jk 好。 但是有一点很不爽,如果我想 /topics 目录下的 html 都由 Apache 解析,jsp都要由 Tomcat 解析。开始想着 “ProxyPass /topics/*.html !” 就行,后来屡试不爽,…#&¥@#×(&%×,竟然不支持通配符。
在 Tomcat 的 server.xml 里,AJP代理的,就对应回 AJP Connector 的 port,Http代理的,就对应回 Http Connector 的 port,另外,如果想在程序里用 request.getServerName() 取到代理的 Name、用request.getServerPort() 取到代理的 Port,就在 Connector 里配置 proxyName 和 proxyPort 吧。
OK,可以测试一下了:
A同事在地址栏敲入:http://192.168.1.10:1020
B同事在地址栏敲入:http://192.168.1.10:1030
C同事在地址栏敲入:http://192.168.1.10:1040
各取其需。。。。。。。可以写 Rewrite Rule 去了..
页:
[1]