您的位置:首页 > 运维架构 > 反向代理

linux apache反向代理 tomcat

2013-09-15 10:24 453 查看
公司添加项目,需要架设环境,当时考虑用的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位
16核cpu 
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
J***A_HOME=/usr/java
J***A_BIN=/usr/java/bin
PATH=$PATH:$J***A_HOME/bin
CLASSPATH=.:$J***A_HOME/lib/dt.jar:$J***A_HOME/lib/tools.jar
export J***A_HOME
J***A_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都启动了

访问下试试吧
 


apache反向代理 tomcat" />
 

本文出自 “奋斗的小子
博客,请务必保留此出处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=="[b]/www/cba.com/htdocs[/b]"
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可生效
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: