`
gembler
  • 浏览: 37206 次
  • 性别: Icon_minigender_1
  • 来自: 妖都
社区版块
存档分类
最新评论

开发环境中的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 去了..

分享到:
评论
9 楼 gembler 2008-12-11  
sdh5724 写道

在apache里加rewrite 必要的时候可以用的, 但是别和开发相关起来。 另外一点是, 开个apache做开发, 是不是有点难以维护, 而且是几个人使用同一个apache进程, 这个设计本身就很不合理。  应用的开发最好, 每个人都是独立的, 不要和其他人关联起来, 再说, rewrite在java里的代价是非常小的, 不需要觉得这个是不合理的。 我们的应用虽然也是跑在apache上, 但是, 开发人员根本不需要apache, 开发的启动应用的脚本, 根本不把apache启动起来, 只有在生产的脚本上, 把apache起来。 开发的时候, 关联的东西越少越好, 最好没有。

ok`明白,其实一值都是每个人独立的
只不过是突然间脑子发热了一下
8 楼 sdh5724 2008-12-11  
gembler 写道
sdh5724 写道
最好你的项目别和APACHE挂在一起,所有rewrite应该在程序的Filter 里做 你会发现, 世界干净了很多, APACHE太多的rewrite很容易失去控制。

说得有道理 ,可是能否给出一两个例子呢? 比方说你的那些血的教训


在apache里加rewrite 必要的时候可以用的, 但是别和开发相关起来。 另外一点是, 开个apache做开发, 是不是有点难以维护, 而且是几个人使用同一个apache进程, 这个设计本身就很不合理。  应用的开发最好, 每个人都是独立的, 不要和其他人关联起来, 再说, rewrite在java里的代价是非常小的, 不需要觉得这个是不合理的。 我们的应用虽然也是跑在apache上, 但是, 开发人员根本不需要apache, 开发的启动应用的脚本, 根本不把apache启动起来, 只有在生产的脚本上, 把apache起来。 开发的时候, 关联的东西越少越好, 最好没有。
7 楼 mysoko 2008-12-10  
是的,我得测试!
原来搞这东西了,拖了很长时间!
事情总不是计划的那么顺利。
think you
6 楼 gembler 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/
5 楼 mysoko 2008-12-10  
<p> </p>
<p>按照你说的,那我之前的jk配置如何改变成proxy ajp</p>
<p> </p>
<p><span>见</span><span/><a href='http://mysoko.iteye.com/blog/259676'>多个tomcat同一个apache,使用jk建立关系时常出错!</a></p>
<p> </p>
<p>我的配置需要注意的就是</p>
<p>三个工程的先后顺序</p>
<p> </p>
<p> #网站主工程 <br/>&lt;VirtualHost *:80&gt;<br/># ServerAdmin sydney.sun@demo.com  <br/># DocumentRoot "D:\apache-tomcat-5.5.26-root\webapps\insurance"  <br/># ServerName *.demo.com  <br/># JkMountFile conf/uriworkermap-root.properties  <br/># ErrorLog logs/demo-error.log  <br/># CustomLog logs/demo-access.log common  <br/># DirectoryIndex index.jsp  <br/>#   <br/>#     &lt;Directory "D:\apache-tomcat-5.5.26-root\webapps\insurance"&gt;  <br/>#         Options FollowSymLinks  <br/>#         AllowOverride None  <br/>#         order allow,deny  <br/>#         Allow from all  <br/>#     &lt;/Directory&gt;  <br/>  &lt;IfModule mod_rewrite.c&gt;<br/>    Rewriteengine on<br/>    RewriteCond %{HTTP_HOST} ^[a-z0-9\-]+\.demo\.com$<br/>    RewriteRule ^/zx\.demo\.com/?$ /advisory/index.do [L,PT]<br/>    #...<br/>  &lt;/IfModule&gt;<br/>&lt;/VirtualHost&gt;<br/><br/>#保险新闻工程<br/>&lt;VirtualHost *:80&gt;<br/># ServerAdmin sydney.sun@demo.com  <br/># DocumentRoot "D:\apache-tomcat-5.5.26-news\webapps\news"  <br/># ServerName news.demo.com  <br/># JkMountFile conf/uriworkermap-news.properties  <br/># ErrorLog logs/news-error.log  <br/># CustomLog logs/news-access.log common  <br/># DirectoryIndex index.jsp  <br/>#   <br/>#     &lt;Directory "D:\apache-tomcat-5.5.26-news\webapps\news"&gt;  <br/>#         Options FollowSymLinks  <br/>#         AllowOverride None  <br/>#         order allow,deny  <br/>#         Allow from all  <br/>#     &lt;/Directory&gt;  <br/>&lt;/VirtualHost&gt;<br/><br/>#文件服务器工程<br/>&lt;VirtualHost *:80&gt;<br/># ServerAdmin sydney.sun@demo.com  <br/># DocumentRoot "D:\apache-tomcat-5.5.26-d1\webapps\d1"  <br/># ServerName d1.demo.com  <br/># JkMountFile conf/uriworkermap-d1.properties  <br/># ErrorLog logs/d1-error.log  <br/># CustomLog logs/d1-access.log common  <br/># DirectoryIndex index.jsp  <br/>#   <br/>#     &lt;Directory "D:\apache-tomcat-5.5.26-d1\webapps\d1"&gt;  <br/>#         Options FollowSymLinks  <br/>#         AllowOverride None  <br/>#         order allow,deny  <br/>#         Allow from all  <br/>#     &lt;/Directory&gt;  <br/>&lt;/VirtualHost&gt;</p>
<p> </p>
<p>je编辑器有点问题</p>
4 楼 gembler 2008-12-10  
sdh5724 写道
最好你的项目别和APACHE挂在一起,所有rewrite应该在程序的Filter 里做 你会发现, 世界干净了很多, APACHE太多的rewrite很容易失去控制。

说得有道理 ,可是能否给出一两个例子呢? 比方说你的那些血的教训
3 楼 gembler 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,然后端口不一样就行了(这种情况没试过,但理论上是这样解决)。
2 楼 sdh5724 2008-12-10  
最好你的项目别和APACHE挂在一起,所有rewrite应该在程序的Filter 里做 你会发现, 世界干净了很多, APACHE太多的rewrite很容易失去控制。
1 楼 mysoko 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

相关推荐

    PHP开发环境(apache,mysql,php)

    PHP开发环境(apache_2.2.4-win32-x86-no_ssl,mysql-5.5.20-win32,php-5.6.32-Win32-VC11-x86),下载之后解压就行,教程地址http://blog.csdn.net/zx1091515459/article/details/78449581

    php+mysql+apache集成开发环境4-4

    3、点击d:/php/setup 中对应操作系统的安装和卸载程序就可以完成php+mysql+apache集成开发环境的安装和卸载; 4、d:/www 为站点的根目录(可在配置文件中更改); 5、为方便同时开发asp的朋友,本系统的...

    php+mysql+apache集成开发环境4-3

    3、点击d:/php/setup 中对应操作系统的安装和卸载程序就可以完成php+mysql+apache集成开发环境的安装和卸载; 4、d:/www 为站点的根目录(可在配置文件中更改); 5、为方便同时开发asp的朋友,本系统的...

    apache+python+django开发环境搭建

    本文将详尽解析如何在Linux及Windows环境下搭建基于Apache、Python与Django的开发环境,为开发者提供全面的技术指导。 ### Linux环境下的Apache + Python + Django开发环境搭建 #### 1. 安装Apache 在Linux环境中...

    window环境下apache模块开发工具apxs及安装使用详细说明

    本文将详细介绍apxs的安装和使用方法,以及在Windows环境中进行Apache模块开发的相关知识点。 **apxs的介绍** apxs是Apache HTTP Server的命令行工具,主要负责模块的编译、链接和安装。在Unix/Linux系统中,apxs...

    135-PHP、Apache环境中部署DVWA

    PHPStudy 是一个集成了 PHP、Apache、MySQL 等多种开发工具的集成开发环境,非常适合开发者学习和测试 web 应用程序。DVWA 的部署可以帮助开发者更好地理解 web 应用程序的安全性,并提高开发者的安全意识和防御...

    php+mysql+apache集成开发环境4-2

    3、点击d:/php/setup 中对应操作系统的安装和卸载程序就可以完成php+mysql+apache集成开发环境的安装和卸载; 4、d:/www 为站点的根目录(可在配置文件中更改); 5、为方便同时开发asp的朋友,本系统的...

    搭建php环境Apache+PHP+mysql

    本篇文章将详细介绍如何手动安装和配置Apache、PHP以及MySQL,以便构建一个完整的PHP开发环境。通过手动安装而非使用集成环境如WAMP或XAMPP,不仅可以更好地理解每个组件的工作原理,还能提高问题诊断能力。 #### ...

    如何利用Apache+Tomcat配置JSP开发环境.doc

    【Apache+Tomcat 配置JSP开发环境】 在Java Web开发中,Apache和Tomcat是常见的服务器组合,用于处理动态网页,特别是JSP(JavaServer Pages)的应用。Apache主要作为一个HTTP服务器,而Tomcat是一个Java Servlet...

    搭建apache python django MySQL_Web开发环境

    搭建apache python django MySQL_Web开发环境 搭建apache python django MySQL_Web开发环境

    apache + php 的运行环境配置程序

    通过这个程序,用户可以快速地在自己的计算机上设置一个本地开发环境,以便进行PHP编程和测试。 首先,Apache服务器的安装和配置涉及到以下几个关键步骤: 1. **下载与安装**:访问Apache官方网站,选择适合操作...

    Apache Nifi 概念介绍、源码解析、开发指南(中文)

    NiFi 的开发指南包括: NiFi 的环境搭建、FlowFile 的处理流程、Processor 的开发、Connection 的配置、Error Handling 等。 Apache NiFi 是一个功能强大、灵活的数据集成工具,具有广泛的应用场景和发展前景。

    apache + php 环境配置

    标签“源码”和“工具”暗示了配置过程中可能涉及查看和修改配置文件的源代码,以及使用各种软件工具,如集成开发环境(IDE)和命令行工具。 压缩包中的文件“搭建Eclipse PHP开发环境 - JackZhou的专栏 - CSDN博客...

    phpnow快速搭建php开发环境包括Apache-20 MySQL-5.0.83 php-5.2.10-Win32 ZendOptimizer

    在IT行业中,搭建PHP开发环境是一项基础且重要的工作,它为开发者提供了运行和测试PHP代码的平台。"phpnow" 是一个便捷的工具,能够帮助用户快速构建PHP开发环境,无需复杂的配置步骤。本篇文章将深入讲解如何使用...

    Java开发环境(Eclipse,mysql,apache-tomcat)

    Java开发环境是软件开发人员构建Java应用程序的基础,它包括了多个关键组件,这些组件在本资源包中均有提供。以下是对各个组件的详细介绍: 1. **Eclipse**:Eclipse是一款开源的集成开发环境(IDE),专为Java...

    搭建apache+python+django+MySQL Web开发环境.docx

    首先,需要安装mod_python,以便将Python集成到Apache中。可以使用以下命令安装: sudo apt-get install libapache2-mod-python 2. 配置mod_python 接下来,需要配置mod_python。在/etc/apache2/mods-available/...

    wampapache集成环境

    只需运行此exe文件,按照向导提示进行安装,即可在Windows机器上快速建立一个完整的开发环境。 总结起来,WampApache提供了一站式的解决方案,使得开发者能够在本地环境中快速搭建Web服务,进行PHP、MySQL以及IIS和...

Global site tag (gtag.js) - Google Analytics