反向代理简言之就是通过一台代理服务器,让Internet用户通过代理服务器可以访问到内部网络上的服务器。 对用户而言只暴露代理服务器。
环境:一台代理服务器:192.168.10.192 OS是centos6.0 64bit;
一台tomcat应用服务器:192.168.10.193 OS是centos6.0 64bit;
说明:代理服务器需要有公网IP地址,在ISP运营商解析域名。
一、apache安装部署
1.1 准备安装httpd-2.2.22
关闭系统自带的web服务:#chkconfig httpd off
安装gcc
#yum –y install gcc*
下载并解压http-2.2.22安装程序
#tar -xzvf httpd-2.2.22.tar.gz
1.2 安装Apache Web Server
进入源码目录
#cd /install/httpd-2.2.22
编译安装
#./configure --prefix=/usr/local/apache --enable-modules=so --enable-mods-shared=most --enable-proxy --enable-proxy-connect --enable-proxy-ftp --enable-proxy-http --enable-proxy-ajp --enable-proxy-balancer --enable-rewrite
#make
#make install
安装完成后检查进程模块列表
/usr/local/apache/bin/apachectl -l
显示
Compiled in modules:
core.c
mod_authn_file.c
mod_authn_default.c
mod_authz_host.c
mod_authz_groupfile.c
mod_authz_user.c
mod_authz_default.c
mod_auth_basic.c
mod_include.c
mod_filter.c
mod_log_config.c
mod_env.c
mod_setenvif.c
mod_version.c
mod_proxy.c
mod_proxy_connect.c
mod_proxy_ftp.c
mod_proxy_http.c
mod_proxy_scgi.c
mod_proxy_ajp.c
mod_proxy_balancer.c
prefork.c
http_core.c
mod_mime.c
mod_status.c
mod_autoindex.c
mod_asis.c
mod_cgi.c
mod_negotiation.c
mod_dir.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_rewrite.c
mod_so.c
[root@demo bin]#
启动Apace Web Server
#./apachect1 start
打开浏览器,测试是否安装成功:
二、编译代理/反向代理模块
进入源码目录
#cd /install/httpd-2.2.22/modules/proxy
先安装基础模块
生成mod_proxy.so
#/usr/local/apache/bin/apxs -i -a -c mod_proxy.c proxy_util.c
生成mod_proxy_http.so
#/usr/local/apache/bin/apxs -i -a -c mod_proxy_http.c
编译生成缓存模块:
#cd /install//httpd-2.2.22/modules/cache
生成mod_cache.c
#/usr/local/apache/bin/apxs -i -a -c mod_cache.c cache_util.c cache_cache.c cache_storage.c cache_pqueue.c cache_hash.c
生成mod_mem_cache.so
#/usr/local/apache/bin/apxs -i -a -c mod_mem_cache.c
生成mod_disk_cache.so
#/usr/local/apache/bin/apxs -i -a -c mod_disk_cache.c
生成mod_file_cache.so
#/usr/local/apache/bin/apxs -i -a -c mod_file_cache.c
启动apache,检查是否成功生成,查看apache安装目录,检查httpd.conf配置文件:
#cat /usr/local/apache/conf/httpd.conf
三、配置代理/反向代理模块
编辑配置文件 httpd.conf,使其支持 vhost 虚拟主机
[root@bogon httpd-2.2.21]# vi /usr/local/apache/conf/httpd.conf
Include conf/extra/httpd-vhosts.conf #去掉改行的注释
编辑 /usr/local/apache2/conf/extra/httpd-vhosts.conf 配置 apache 的虚拟主机
#vi httpd-vhosts.conf
NameVirtualHost *:80
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
<VirtualHost *:80>
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
ServerAdmin mager@xxxxxxxxx.com
ServerName www.aaa.com
ServerAlias www.aaa.com
ErrorLog "logs/aaa-error_log"
CustomLog "logs/aaa-access_log" common
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Options -Indexes
AllowOverride None
Order allow,deny
Allow from all
Satisfy all
</Proxy>
ProxyPass / http://192.168.10.192:8888/
ProxyPassReverse / http://192.168.10.192:8888/
</VirtualHost>
<VirtualHost *:80>
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
ServerAdmin mager@xxxxxxxxx.com
ServerName www.bbb.com
ServerAlias www.bbb.com
ErrorLog "logs/bbb-error_log"
CustomLog "logs/bbb-access_log" common
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Options -Indexes
AllowOverride None
Order allow,deny
Allow from all
Satisfy all
</Proxy>
ProxyPass / http://192.168.10.193:8080/
ProxyPassReverse / http://192.168.10.193:8080/
</VirtualHost>
#代理HTTP和FTP连接的接收缓冲区大小(字节)
ProxyReceiveBufferSize 2048
#代理超时
ProxyTimeout 300
#转发请求的最大代理数目 默认15,这个设置是为了避免无限代理循环或DoS攻击的发生
ProxyMaxForwards 300
[root@demo extra]#
四、安装Tomcat6.0
修改tomcat配置文件server.xml
在</Host> </Host>中间必须加别名,也就是预定义的域名,一定要填写啊,不然不能访问正常的。
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
-->
<Alias>www.aaa.com</Alias>
<Context path="" docBase="financeAdmin" debug="0" reloadable="true" />
</Host>
</Engine>
</Service>
</Server>
[root@business ~]#
上面这个还是比较容易理解的,主要就是设置了一个东西,当域名(可以正常访问的)到这里的时候默认是访问80端口,所以上面是设置了当请求到该服务器时如何对域名进行转发。
第二个就是设置和tomcat的整合,当访问www.bbb.com的时候,直接转发到服务器8080端口下去访问该域名,就相当于远程浏览器访问www.bbb.com:8080了
查看一下端口lsof |grep tomcat和lsof -i:8080可以看到你想要的信息,lsof -i:8080是用来查看8080端口是谁在使用!
然后重新启动一下apache:service httpd restart 等待启动完成,OK
现在不急着访问,还需要设置一下tomcat
打开tomcat的service.xml 我的在/usr/local/tomcat/conf/service.xml下。vi后输入:set nu显示行,这里你可以清晰的看到tomcat的配置:Connector中可以看出HTTP8080端口,然后AJP是8009端口。
下面找到engine这个标签,该文件只此一个标签。engine处理在Connector中接受到的所有客户请求!
可以看到defaulthost是localhost,这里无伤大雅,别去管它,当然你要设置成你的域名也可以。
其子标签host设置如下,name修改成域名,appbase就是程序路径,默认好像是webapps,就是tomcat默认源码发布的位置,这里可以设置成绝对路径没问题/usr/local/tomcat/webapps
host就是定义了一个虚拟主机,所以要实现单IP多域名的话就需要设置多个host,然后可以把appbase设置到程序目录下,访问的时候可直接到达每一个应用程序的根目录
host标签下添加Context,这个上下文定义可以参照
Java代码
1.<Context path="" docBase="/usr/local/tomcat/webapps" debug="1" privileged="true" reloadable="true">
2. </Context>
<Context path="" docBase="/usr/local/tomcat/webapps" debug="1" privileged="true" reloadable="true">
</Context>
docbase是文档路径,path不填表示访问的时候默认是以域名转发到的路径为根路径,一般不用管它
然后保存退出:wq
这时需要重新启动一下tomcat
到达tomcat的bin目录下我这里是/usr/local/tomcat/bin/shutdown.sh 运行这个然后再运行/usr/local/tomcat/bin/startup.sh启动,完成重启
浏览器输入域名可以访问到不同的网站说明配置成功!