锁定老帖子 主题:开发环境中的Apache
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-20
最后修改:2008-11-20
假设: 项目需要做 URL Rewrite,不想用 UrlRewriteFilter 集成到应用程序里去,于是就选用一些 Web Server 来做,后来选了 Apache,但是又懒
有四台开发机器,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同事: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 在这个时候,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
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-12-10
如果a同事在地址栏不敲端口呢,就是http://192.168.1.10,想到他的工作环境去,
b,c同样如此。。类似: http://a.demo.com 到a http://b.demo.com 到b http://c.demo.com 到c 还有这样的话,你这边是a,b,c每人一台机器上有个独立的项目,还要去假设访问apache哪里做什么?? 哈,就是让我想起了我那个问题! 特殊情况: 如果3个人的项目都在apache那机器上,装了3个tomcat分别放入a,b,c项目,给予tomcat相应的配置,那么apache这边又如何实现 http://a.demo.com 到a http://b.demo.com 到b http://c.demo.com 到c |
|
返回顶楼 | |
发表时间:2008-12-10
最好你的项目别和APACHE挂在一起,所有rewrite应该在程序的Filter 里做 你会发现, 世界干净了很多, APACHE太多的rewrite很容易失去控制。
|
|
返回顶楼 | |
发表时间:2008-12-10
最后修改:2008-12-10
mysoko 写道 如果a同事在地址栏不敲端口呢,就是http://192.168.1.10,想到他的工作环境去,
b,c同样如此。。类似: http://a.demo.com 到a http://b.demo.com 到b http://c.demo.com 到c 我这里只不过是其中一种方法(端口)来做标识 ![]() 每位同事的hosts增加各自东西: A同事的hosts配置 写道 192.168.1.10 a.demo.com
B同事的hosts配置 写道 192.168.1.10 b.demo.com
C同事的hosts配置 写道 192.168.1.10 c.demo.com
然后修改Apache的httpd.conf: 1.所有都Listen都干掉,只弄一个: 原来的配置 写道 #A同事
Listen 1020 #B同事 Listen 1030 #C同事 Listen 1040 修改后的配置 写道 Listen 80
2.在那几VirtualHost前加一句: 写道 NameVirtualHost 192.168.1.10 3.每个VirtualHost都修改一下: 原来的配置 写道 #A同事
<VirtualHost *:1020></VirtualHost> #B同事 <VirtualHost *:1030></VirtualHost> #C同事 <VirtualHost *:1040></VirtualHost> 修改后的配置 写道 #A同事
<VirtualHost a.demo.com> #新加的ServerName ServerName a.demo.com #proxy和rewrite的东西不动 </VirtualHost> #B同事 <VirtualHost b.demo.com> #新加的ServerName ServerName b.demo.com #proxy和rewrite的东西不动 </VirtualHost> #C同事 <VirtualHost c.demo.com> #新加的ServerName ServerName c.demo.com #proxy和rewrite的东西不动 </VirtualHost> 4.在192.168.1.10(Apache)的机器上的hosts里增加指向本机ip的配置: hosts 写道 192.168.1.10 a.demo.com b.demo.com c.demo.com
btw:要是觉得每VirtualHost里都放相同的rewrite rule觉得不爽的话,可以分出文件出来,然后include。 --------------------------我要隔开我要隔开-------------------------- mysoko 写道 还有这样的话,你这边是a,b,c每人一台机器上有个独立的项目,还要去假设访问apache哪里做什么??
共享同一份rewrite rule。 --------------------------我要隔开我要隔开-------------------------- mysoko 写道 哈,就是让我想起了我那个问题!
特殊情况: 如果3个人的项目都在apache那机器上,装了3个tomcat分别放入a,b,c项目,给予tomcat相应的配置,那么apache这边又如何实现 http://a.demo.com 到a http://b.demo.com 到b http://c.demo.com 到c 在每个VirtualHost里ProxyPass和ProxyPassReverse后面的那ip都用本机ip,然后端口不一样就行了(这种情况没试过,但理论上是这样解决)。 |
|
返回顶楼 | |
发表时间:2008-12-10
最后修改:2008-12-10
sdh5724 写道 最好你的项目别和APACHE挂在一起,所有rewrite应该在程序的Filter 里做 你会发现, 世界干净了很多, APACHE太多的rewrite很容易失去控制。
说得有道理 ![]() ![]() |
|
返回顶楼 | |
发表时间:2008-12-10
按照你说的,那我之前的jk配置如何改变成proxy ajp
见多个tomcat同一个apache,使用jk建立关系时常出错!
我的配置需要注意的就是 三个工程的先后顺序
#网站主工程
je编辑器有点问题 |
|
返回顶楼 | |
发表时间:2008-12-10
其实在你那贴子里,robbin都已经说了。我细化一点点:
在httpd.conf里注释掉所有关于jk的东西,然后把mod_proxy include进来,根据需要include其他mod,如mod_proxy_http(2.0+),mod_proxy_ajp(2.2+),mod_proxy_balancer(2.2+)。 在加上: ProxyPass / ajp://localhost:8009/ ProxyPassReverse / ajp://localhost:8009/ or ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ |
|
返回顶楼 | |
发表时间:2008-12-10
是的,我得测试!
原来搞这东西了,拖了很长时间! 事情总不是计划的那么顺利。 think you |
|
返回顶楼 | |
发表时间:2008-12-11
gembler 写道 sdh5724 写道 最好你的项目别和APACHE挂在一起,所有rewrite应该在程序的Filter 里做 你会发现, 世界干净了很多, APACHE太多的rewrite很容易失去控制。
说得有道理 ![]() ![]() 在apache里加rewrite 必要的时候可以用的, 但是别和开发相关起来。 另外一点是, 开个apache做开发, 是不是有点难以维护, 而且是几个人使用同一个apache进程, 这个设计本身就很不合理。 应用的开发最好, 每个人都是独立的, 不要和其他人关联起来, 再说, rewrite在java里的代价是非常小的, 不需要觉得这个是不合理的。 我们的应用虽然也是跑在apache上, 但是, 开发人员根本不需要apache, 开发的启动应用的脚本, 根本不把apache启动起来, 只有在生产的脚本上, 把apache起来。 开发的时候, 关联的东西越少越好, 最好没有。 |
|
返回顶楼 | |
发表时间:2008-12-11
sdh5724 写道 在apache里加rewrite 必要的时候可以用的, 但是别和开发相关起来。 另外一点是, 开个apache做开发, 是不是有点难以维护, 而且是几个人使用同一个apache进程, 这个设计本身就很不合理。 应用的开发最好, 每个人都是独立的, 不要和其他人关联起来, 再说, rewrite在java里的代价是非常小的, 不需要觉得这个是不合理的。 我们的应用虽然也是跑在apache上, 但是, 开发人员根本不需要apache, 开发的启动应用的脚本, 根本不把apache启动起来, 只有在生产的脚本上, 把apache起来。 开发的时候, 关联的东西越少越好, 最好没有。 ok`明白,其实一值都是每个人独立的 只不过是突然间脑子发热了一下 ![]() |
|
返回顶楼 | |
浏览 6893 次