linux apache反向代理 tomcat

在一台CentOS 5.5 64位服务器上,配置了16核CPU和32GB内存,使用Apache和Tomcat进行整合。通过Apache的proxy-ajp模块实现反向代理,以连接并管理四个Tomcat实例。详细步骤包括源码编译安装Apache,安装apr和apr-util库,以及配置Apache启用反向代理和AJP支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公司添加项目,需要架设环境,当时考虑用的 nginx 转发 tomcat ,可是分公司那边不会用 nignx ,只有用 apache 反向代理 tomcat 虚拟主机,由于是头一次用 apache 做反向, tomcat 集群,特留下过程,方便他人
在网上找了好多文章,其中为经典的我都摘抄了
     Apache HTTP server Tomcat server 整合,一般是希望对于用户只公布 Apache HTTP server 的网址,而 Tomcat 的网址则不公布,扮演一个幕后英雄的角色。访问 Tomcat HTTP 请求,通过 Apache 转发给 Tomcat Tomcat 处理完后,将 HTTP 回应返回给 Apache ,然后 Apache  HTTP 回应发回给用户端浏览器。
Apache HTTP server Tomcat server 直接的 HTTP 数据传输,有很多种方法。
    
方法一,使用 mod_jk 。很多网站上介绍到 Apache HTTP server Tomcat server 整合的时候,都是在介绍   mod_jk.so 的使用,这是一种比较老的方法,并且需要额外下载 mod_jk Apache Tomcat 的默认配置文件都需要改动。
方法二, URL rewrite ,也就是对于指定格式的 URL ,转发给某个 Tomcat 的网址。这里所说的指定格式,是指 Apache 所使用的正则表达式,通俗地将,是一种类似 * 的一种比较高级通配符。这种方法不需要下在额外的文件,只需要配置 Apache
方法三, mod_proxy_ajp ,仅在 Apache 2.1 及以后的版本中可用, Apache 自带的一个新功能模块。这时 Apache 使用 Apache JServ Protocol Tomcat 通讯。不需要下在额外的文件,需要改动 Apache Tomcat 的默认配置文件都需要改动。
方法四, mod_proxy 。其实 mod_proxy 既可以做类似于 Wingate 一样的公司局域网共享上网代理,也可以做反向代理 (Reverse proxy) 。这里使用的是反向代理功能,用户端浏览器不需要把代理服务器改成这里的 Apache 地址。 mod_proxy Apache 自带功能,并且配置比较简单。
 

yum install gcc –y

wget http://mirror.bjtu.edu.cn/apache//httpd/httpd-2.2.17.tar.gz

wget http://www.oracle.com/technetwork/indexes/downloads/index.html

wget http://labs.renren.com/apache-mirror/tomcat/tomcat-7/v7.0.8/bin/apache-tomcat-7.0.8.tar.gz

我是用一台服务器 做的 环境如下

Centos 5.5 64 16cpu  32G 内存

Apache + tomcat (开启四个端口)

 

#ar zxvf http-2.2.17.tar.gz
#d httpd-2.2.17
#/configure --prefix=/usr/local/apache --enable-modules=so --enable-mods-shared=all --enable-proxy --enable-proxy-connect --enable-proxy-ftp --enable-proxy-http --enable-proxy-ajp --enable-proxy-balancer --enable-rewrite
#make ; make install
#cp support/apachectl /etc/init.d/httpd
#chmod 755 /etc/init.d/httpd
#vim /etc/init.d/httpd
#chconfig –add httpd
#chkconfig –level 345 httpd on
cd ..
chmod +x jdk-x64.bin          # 添加执行权限
./jdk-x64.bin             # 安装 jdk
mv jdk1.6.0_23/ /usr/java      
vim /etc/profile    # 添加 java 环境变量
#Java Environment
JAVA_HOME=/usr/java
JAVA_BIN=/usr/java/bin
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
source /etc/profile  
#java –version
    java version "1.6.0_23"
    Java(TM) SE Runtime Environment (build 1.6.0_23-b05)
    Java HotSpot(TM) 64-Bit Server VM (build 19.0-b09, mixed mode)
 
#tar zxvf apache-tomcat-7.0.8.tar.gz
#mv apache-tomcat-7.0.8 /usr/local/tomcat73
#vim /etc/profile      # 添加 tomcat 环境变量
TOMCAT_HOME=/usr/local/tomcat73
CATALINA_HOME=/usr/local/tomcat73
CATLINA_BASE=/usr/local/tomcat73
/usr/local/tomcat73/bin/catalina.sh start  # 添加启动脚本
export TOMCAT_HOME  CATALINA_HOME  CATALINA_BASH TOMCAT_BIN
#source /etc/profile

 

 

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule rewrite_module modules/mod_rewrite.so
   apache 虚拟主机前边的 # 去掉
           Include conf/extra/httpd-vhosts.conf
   添加 Include conf/extra/httpd-vhosts.conf  如下
<VirtualHost *80>
     ServerAdmin crazylinux@163.com
     ProxyRequests Off
     Proxypass / balancer://proxy/
     <Proxy balancer://proxy>
         Order Deny,Allow
         Allow from all
         BalancerMember http://127.0.0.1:8844         #tomcat  端口 (要用的端口,预设值的   可以随便设置)
         BalancerMember http://127.0.0.1:8855         #tomcat  端口
         BalancerMember http://127.0.0.1:8866          #tomcat  端口
         BalancerMember http://127.0.0.1:8877          #tomcat  端口
     </Proxy>
</VirtualHost>
保存修改   启动 apache 服务
#/usr/local/apache/bin/apachectl -k start
  
修改 tomcat ,添加虚拟主机 按端口走 8844 8855 8866 8877 按照预设值的
#vim /usr/local/tomcat73/conf/server.xml 只修改红色字体
  <Service name="Catalina0">
<Connector port="8044" protocol="AJP/1.3" redirectPort="8443" />
    <Connector port="8844" />
    <Engine name="Catalina0" defaultHost="localhost" jvmRoute="jvm1">
      <Logger className="org.apache.catalina.logger.FileLogger" />
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase" />
      <Host name="localhost" appBase="webapps0" />
    </Engine>
  </Service>
  <Service name="Catalina1">
<Connector port="8055" protocol="AJP/1.3" redirectPort="8443" />
    <Connector port="8855" />
    <Engine name="Catalina1" defaultHost="localhost" jvmRoute="jvm2">
      <Logger className="org.apache.catalina.logger.FileLogger" />
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase" />
      <Host name="localhost" appBase="webapps1" />
    </Engine>
  </Service>
  <Service name="Catalina2">
<Connector port="8066" protocol="AJP/1.3" redirectPort="8443" />
    <Connector port="8866" />
    <Engine name="Catalina2" defaultHost="localhost" jvmRoute="jvm3">
      <Logger className="org.apache.catalina.logger.FileLogger" />
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase" />
      <Host name="localhost" appBase="webapps2" />
    </Engine>
  </Service>
  <Service name="Catalina3">
<Connector port="8077" protocol="AJP/1.3" redirectPort="8443" />
    <Connector port="8877" />
    <Engine name="Catalina3" defaultHost="localhost" jvmRoute="jvm4">
      <Logger className="org.apache.catalina.logger.FileLogger" />
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase" />
      <Host name="localhost" appBase="webapps3" />
    </Engine>
  </Service>
然后 创建 tomcat web 目录在 /usr/local/tomcat73/   webapps0 webapps1 webapps2 webapps3 并在每个目录里面添加 index1.jsp 并添加 每个端口的对应号
启动 tomcat
#/usr/local/tomcat73/bin/start.sh
#/usr/local/apache/bin/apachetl –k restart
  查看端口   netsant –ntlp
[root@localhost tomcat73]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name  
tcp        0      0 0.0.0.0:964                 0.0.0.0:*                   LISTEN      2902/rpc.statd     
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      2849/portmap       
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      3155/cupsd         
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      3178/sendmail: acce
tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN      11977/1            
tcp        0      0 :::8866                     :::*                        LISTEN      15836/java         
tcp        0      0 :::8066                     :::*                        LISTEN      15836/java         
tcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTEN      15836/java         
tcp        0      0 :::8009                     :::*                        LISTEN      15836/java         
tcp        0      0 :::8844                     :::*                        LISTEN      15836/java         
tcp        0      0 :::8044                     :::*                        LISTEN      15836/java         
tcp        0      0 :::8877                     :::*                        LISTEN      15836/java         
tcp        0      0 :::8077                     :::*                        LISTEN      15836/java         
tcp        0      0 :::80                       :::*                        LISTEN      15987/httpd        
tcp        0      0 :::8080                     :::*                        LISTEN      15836/java         
tcp        0      0 :::22                       :::*                        LISTEN      25432/sshd         
tcp        0      0 :::8855                     :::*                        LISTEN      15836/java         
tcp        0      0 :::8055                     :::*                        LISTEN      15836/java         
tcp        0      0 ::1:6010                    :::*                        LISTEN      11977/1 
 
 
看到了 80  8844 8855 8866 8877   tomcat 虚拟主机   apache 都启动了 访问下试试吧
 

 

本文出自 “奋斗的小子” 博客,请务必保留此出处http://crazyming.blog.51cto.com/1048571/503637

 

 

-----------------------------------------------------------------------------------

 

 

用apache代理实现整合多个tomcat

 

 

 

要求:

运行多个tomcat,通过apache侦听的端口进行区分。
对于每个tomcat,配置各自需要服务的虚拟主机
使用Apache的Proxy进行代理转发,转到对应的tomcat上面,重点在端口不同
取消jk连接,减少复杂度。虽然损失了一些Apache对静态文本的性能,但整体看还是值得的
结果:
tomcat的server.xml里面配置了各自的虚拟主机,比如 www.aaa.com 和 oa.aaa.com。第一个是主域名,第二个是二级域名。tomcat端口为8080。第二个tomcat配置了一个 sales.aaa.com 用来支持销售,端口为8081。详细的配置文件请参考tomcat的虚拟主机配置,这里就不写了。
测试各个虚拟主机的运行是否正常,使用 http:// oa.aaa.com:8080/ 这样的方式进行测试。
apache的 httpd.conf配置
打开代理所需要的.so支持模块,在httpd.conf里面,取消下面四行的注释:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
 
制作各自的虚拟主机
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.aaa.com
ProxyPass /
http://www.aaa.com:8080/
ProxyPassReverse / http://www.aaa.com:8080/
</VirtualHost>
<VirtualHost *:80>
ServerName oa.aaa.com
ProxyPass /
http://oa.aaa.com:8080/
ProxyPassReverse / http://oa.aaa.com:8080/
</VirtualHost>
<VirtualHost *:80>
ServerName sales.aaa.com
ProxyPass /
http://sales.aaa.com:8081/
ProxyPassReverse / http://sales.aaa.com:8081/
</VirtualHost>
 
若需要内部端口整合
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
 
现在我们编辑第一个tomcat配置文件,端口为默认的8080
<Engine name="Catalina" defaultHost=www.aaa.com>
<Host name=www.aaa.com appBase=="/www/aaa.com/htdocs" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false
"

<
Host name=www.cba.com appBase=="/www/cba.com/htdocs" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false" />

 

源码编译安装proxy-ajp模式的
# tar xvjf httpd-2.2.0.tar.bz2
# cd httpd-2.2.0

安装apr
# cd srclib/apr
# ./configure --prefix=/server/soft/apr
# make
# make install

安装apr-util
# cd ../apr-util/
# ./configure --prefix=/server/soft/apr-util \
    --with-apr=/server/soft/apr
# make
# make install
# cd ../../

安装apache
# ./configure --prefix=/server/soft/apache \
    --enable-so \
    --enable-rewrite=share \
    --enable-proxy=share \
    --enable-proxy-ajp=share \
    --enable-dav=share \
    --with-apr=/server/soft/apr \
    --with-apr-util=/server/soft/apr-util/
# make
# make install

 


</Engine>
 
注意:网站文件请分别放在/www/*/htdocs/ROOT目录
  Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false "  />
</Engine>
编辑第二个tomcat配置文件,端口修改为8081
<Engine name="Catalina" defaultHost=localhost>
<
 
注意:网站文件放在tomcat安装文件目录的默认ROOT目录
localhost这里可以不用修改,因为只有一个网站,我们就可以不用域名代替
 
附出错分析:
如果编译安装没有编辑代理模块的解决办法
 
方法如下:
编译的时候要打开WITH_PROXY_MODULES选项,但我又不想重新安装apache,所以使用以下步骤达到此目的。
1、重新编译带有proxy模块的apache,但不安装。
进入源代码目录
#cd /usr/loacl/src/httpd2.2.9
#make WITH_PROXY_MODULES=yes
2. 分别编译生成代理模块
    cd modules/proxy
   /usr/local/apache/bin/apxs -c -i -a  mod_proxy.so proxy_util.c
   /usr/local/apache/bin/apxs -c -i -a  mod_proxy_ajp.so mod_proxy_ajp.c
   /usr/local/apache/bin/apxs -c -i -a  mod_proxy_connect.so mod_proxy_connect.c
   /usr/local/apache/bin/apxs -c -i -a  mod_proxy_http.so mod_proxy_http.c
   /usr/local/apache/bin/apxs -c -i -a  mod_proxy_ftp.so mod_proxy_ftp.c
 
这样就编译进了apache配置文件
编译过程中或者会出错,因为权限原因,需要给755权限
chmod 755 /usr/local/apache/modules/*.so
 
查看httpd.conf文件显示已经添加了代理模块
以下是httpd.conf的部分显示
# Example:
# LoadModule foo_module modules/mod_foo.so
LoadModule php5_module        modules/libphp5.so
LoadModule proxy_module   modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module  modules/mod_proxy_http.so
LoadModule proxy_ftp_module   modules/mod_proxy_ftp.so
#
已经添加进了apache,现在需要重新启动apache,就可以正常配置代理方式了

#配置(prefix是安装路径,enable-mods-shared=all表示编译配置所有so文件)

./configure --prefix=/usr/local/apache --enable-mods-shared=all

php编译案例:

./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
单独编译apache可以进行这样的操作
 
[root@localhost apache]#./configure --prefix=/usr/local/apache --enable-so --enable-mods-shared="proxy proxy_http proxy_ftp proxy_connect headers"
 
编译
[root@localhost apache]# make
检查编译后的是否有编译出so文件
[root@localhost apache]# cd /usr/local/apache/modules
[root@localhost modules]#]# ls
httpd.exp       mod_proxy_ajp.so       mod_proxy_connect.so mod_proxy_http.so
mod_headers.so mod_proxy_balancer.so mod_proxy_ftp.so      mod_proxy.so

 
如果存在以上文件则说明编译成功
安装
[root@localhost apache]# make install
 
启动APACHE
[root@localhost apache]# /usr/local/apache/bin/httpd -k start
测试如果输出IT works那么就ok了
附:
tomcat 404页面设置方法在web.xml里面加入
     <error-page>
              <error-code>404</error-code>
              <location>/404.jsp</location>
      </error-page>
添加404.jsp页面文件,重新启动tomcat可生效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值