linux apache反向代理 tomcat
2012-04-24 17:55
351 查看
转自:http://zhumeng8337797.blog.163.com/blog/static/10076891420114248261683/?suggestedreading&wumii
公司添加项目,需要架设环境,当时考虑用的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
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都启动了访问下试试吧
本文出自 “奋斗的小子” 博客,请务必保留此出处/article/4397224.html
-----------------------------------------------------------------------------------
用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里面,取消下面四行的注释:
制作各自的虚拟主机
若需要内部端口整合
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
源码编译安装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目录
Hostname="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可生效
公司添加项目,需要架设环境,当时考虑用的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
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都启动了访问下试试吧
本文出自 “奋斗的小子” 博客,请务必保留此出处/article/4397224.html
-----------------------------------------------------------------------------------
用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> <Hostname=www.aaa.comappBase=="/www/aaa.com/htdocs" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false" <Hostname=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目录
Hostname="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可生效
相关文章推荐
- linux apache反向代理 tomcat
- linux apache反向代理 tomcat
- linux apache反向代理 tomcat
- Apache 反向代理(实现将Tomcat任意端口转化为80端口)
- Linux下apache httpd+tomcat整合步骤
- linux下配置web服务器Apache-Tomcat
- Linux防火墙上的Apache反向代理
- Linux下Apache与Tomcat整合的简单方法
- 浅谈apache和tomcat在linux下的整合
- linux下apache tomcat mod_jk负载均衡
- red hat enterprise linux 5.4安装,mysql 安装、vsftp安装、apache安装、tomcat安装、JDK安装、SSH部署
- Linux中Apache+Tomcat+JK实现负载均衡和群集的完整过程
- Apache + Tomcat + Linux 集群和均衡负载 (Session 同步复制)
- Linux下Apache与Tomcat整合的简单方法
- Linux下通过Apache搭建Tomcat集群
- Linux 启动tomcat报错touch: 无法创建"/usr/local/tomcat-9.0.2/apache-tomcat-9.0.2-src/logs/catalina.out":
- linux下利用mod-jk实现apache和tomcat整合
- 在Linux(Fedora 16)上配置Tomcat 7.0.x 和Apache Http Server 2.2.x 集成
- apache+tomcat整合(linux平台)
- APACHE、TOMCAT在64位LINUX下集群配置