1. 要求: 
  2.   运行多个tomcat,通过apache侦听的端口进行区分。 
  3.   对于每个tomcat,配置各自需要服务的虚拟主机 
  4.   使用Apache的Proxy进行代理转发,转到对应的tomcat上面,重点在端口不同 
  5.   取消jk连接,减少复杂度。虽然损失了一些Apache对静态文本的性能,但整体看还是值得的 
  6.   结果: 
  7.   tomcat的server.xml里面配置了各自的虚拟主机,比如 www.aaa.com 和 oa.aaa.com。第一个是主域名,第二个是二级域名。tomcat端口为8080。第二个tomcat配置了一个 sales.aaa.com 用来支持销售,端口为8081。详细的配置文件请参考tomcat的虚拟主机配置,这里就不写了。 
  8.   测试各个虚拟主机的运行是否正常,使用 http:// oa.aaa.com:8080/ 这样的方式进行测试。 
  9. apache的 httpd.conf配置 
  10. 打开代理所需要的.so支持模块,在httpd.conf里面,取消下面四行的注释: 
  11. LoadModule proxy_module modules/mod_proxy.so 
  12. LoadModule proxy_connect_module modules/mod_proxy_connect.so 
  13. LoadModule proxy_http_module modules/mod_proxy_http.so 
  14. LoadModule proxy_ftp_module modules/mod_proxy_ftp.so 
  15.   
  16. 制作各自的虚拟主机 
  17. NameVirtualHost *:80  
  18. <VirtualHost *:80> 
  19. ServerName www.aaa.com 
  20. ProxyPass / http://www.aaa.com:8080/ 
  21. ProxyPassReverse / http://www.aaa.com:8080/ 
  22. </VirtualHost> 
  23. <VirtualHost *:80> 
  24. ServerName oa.aaa.com 
  25. ProxyPass / http://oa.aaa.com:8080/ 
  26. ProxyPassReverse / http://oa.aaa.com:8080/ 
  27. </VirtualHost> 
  28. <VirtualHost *:80> 
  29. ServerName sales.aaa.com 
  30. ProxyPass / http://sales.aaa.com:8081/ 
  31. ProxyPassReverse / http://sales.aaa.com:8081/ 
  32. </VirtualHost> 
  33.   
  34. 若需要内部端口整合 
  35. ProxyPass / ajp://localhost:8009/ 
  36. ProxyPassReverse / ajp://localhost:8009/ 
  37.   
  38. 现在我们编辑第一个tomcat配置文件,端口为默认的8080 
  39. <Engine name="Catalina" defaultHost=www.aaa.com> 
  40. <Host name=www.aaa.com appBase=="/www/aaa.com/htdocs" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"  
  41.  
  42. <Host name=www.cba.com appBase=="/www/cba.com/htdocs" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false" /> 
  43.   
  44. 源码编译安装proxy-ajp模式的 
  45. # tar xvjf httpd-2.2.0.tar.bz2 
  46. # cd httpd-2.2.0 
  47.  
  48. 安装apr 
  49. # cd srclib/apr 
  50. # ./configure --prefix=/server/soft/apr 
  51. # make 
  52. # make install 
  53.  
  54. 安装apr-util 
  55. # cd ../apr-util/ 
  56. # ./configure --prefix=/server/soft/apr-util \ 
  57.     --with-apr=/server/soft/apr 
  58. # make 
  59. # make install 
  60. # cd ../../ 
  61.  
  62. 安装apache 
  63. # ./configure --prefix=/server/soft/apache \ 
  64.     --enable-so \ 
  65.     --enable-rewrite=share \ 
  66.     --enable-proxy=share \ 
  67.     --enable-proxy-ajp=share \ 
  68.     --enable-dav=share \ 
  69.     --with-apr=/server/soft/apr \ 
  70.     --with-apr-util=/server/soft/apr-util/ 
  71. # make  
  72. # make install 
  73.   
  74.  
  75. </Engine> 
  76.   
  77. 注意:网站文件请分别放在/www/*/htdocs/ROOT目录 
  78.  Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"   /> 
  79. </Engine> 
  80. 编辑第二个tomcat配置文件,端口修改为8081 
  81. <Engine name="Catalina" defaultHost=localhost> 
  82. < 
  83.   
  84. 注意:网站文件放在tomcat安装文件目录的默认ROOT目录 
  85. localhost这里可以不用修改,因为只有一个网站,我们就可以不用域名代替 
  86.   
  87. 附出错分析: 
  88. 如果编译安装没有编辑代理模块的解决办法 
  89.   
  90. 方法如下: 
  91. 编译的时候要打开WITH_PROXY_MODULES选项,但我又不想重新安装apache,所以使用以下步骤达到此目的。 
  92. 1、重新编译带有proxy模块的apache,但不安装。 
  93. 进入源代码目录 
  94. #cd /usr/loacl/src/httpd2.2.9 
  95. #make WITH_PROXY_MODULES=yes 
  96. 2. 分别编译生成代理模块 
  97.     cd modules/proxy 
  98.    /usr/local/apache/bin/apxs -c -i -a  mod_proxy.so proxy_util.c 
  99.    /usr/local/apache/bin/apxs -c -i -a  mod_proxy_ajp.so mod_proxy_ajp.c 
  100.    /usr/local/apache/bin/apxs -c -i -a  mod_proxy_connect.so mod_proxy_connect.c 
  101.    /usr/local/apache/bin/apxs -c -i -a  mod_proxy_http.so mod_proxy_http.c 
  102.    /usr/local/apache/bin/apxs -c -i -a  mod_proxy_ftp.so mod_proxy_ftp.c 
  103.   
  104. 这样就编译进了apache配置文件 
  105. 编译过程中或者会出错,因为权限原因,需要给755权限 
  106. chmod 755 /usr/local/apache/modules/*.so 
  107.   
  108. 查看httpd.conf文件显示已经添加了代理模块 
  109. 以下是httpd.conf的部分显示 
  110. # Example: 
  111. # LoadModule foo_module modules/mod_foo.so 
  112. LoadModule php5_module        modules/libphp5.so 
  113. LoadModule proxy_module   modules/mod_proxy.so 
  114. LoadModule proxy_connect_module modules/mod_proxy_connect.so 
  115. LoadModule proxy_http_module  modules/mod_proxy_http.so 
  116. LoadModule proxy_ftp_module   modules/mod_proxy_ftp.so 
  117. 已经添加进了apache,现在需要重新启动apache,就可以正常配置代理方式了 
  118. #配置(prefix是安装路径,enable-mods-shared=all表示编译配置所有so文件) 
  119. ./configure --prefix=/usr/local/apache --enable-mods-shared=all 
  120.  php编译案例: 
  121.  
  122. ./configure --prefix=/usr/local/php5 --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/php5 --disable-debug --enable-ftp --enable-inline-optimization --enable-magic-quotes --enable-mbstring --enable-safe-mode --enable-wddx=shared --with-gd --with-gettext --with-regex=system --with-zlib --with-mcrypt --enable-sockets 
  123. 单独编译apache可以进行这样的操作 
  124.   
  125. [root@localhost apache]#./configure --prefix=/usr/local/apache --enable-so --enable-mods-shared="proxy proxy_http proxy_ftp proxy_connect headers" 
  126.   
  127. 编译 
  128. [root@localhost apache]# make 
  129. 检查编译后的是否有编译出so文件 
  130. [root@localhost apache]# cd /usr/local/apache/modules 
  131. [root@localhost modules]#]# ls 
  132. httpd.exp       mod_proxy_ajp.so       mod_proxy_connect.so mod_proxy_http.so 
  133. mod_headers.so mod_proxy_balancer.so mod_proxy_ftp.so      mod_proxy.so 
  134.   
  135. 如果存在以上文件则说明编译成功 
  136. 安装 
  137. [root@localhost apache]# make install 
  138.   
  139. 启动APACHE 
  140. [root@localhost apache]# /usr/local/apache/bin/httpd -k start 
  141. 测试如果输出IT works那么就ok了 
  142. 附: 
  143. tomcat 404页面设置方法在web.xml里面加入 
  144.      <error-page> 
  145.               <error-code>404</error-code> 
  146.               <location>/404.jsp</location> 
  147.       </error-page> 
  148. 添加404.jsp页面文件,重新启动tomcat可生效