免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3551 | 回复: 0
打印 上一主题 下一主题

Apache ProxyPass ProxyPassReverse反向代理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-20 09:48 |只看该作者 |倒序浏览
Apache ProxyPass ProxyPassReverse反向代理
一、Apache支持ProxyPass方式

方法1.
编译Apache的时候加上参数  --enable-proxy
./configure --prefix=/usr/local/apache2 --enable-module=so --enable-rewrite --enable-proxy
查看支持哪些模块 <是否有mod_proxy.c>
/usr/local/apache2/bin/apache1 -l

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
如果对已经安装的apache再次进行 proxy的安装 可用用APXS编译Apache模块

/usr/local/apache2/bin/httpd -l 查看是否有mod_so.c
 配置apache反向代理,需要用到apache的mod_rewrite和mod_proxy模块组,
使用apxs来安装新的模块,在安装mod_proxy模块的时候,
需要将proxy_util.c加入进来一起编译;
同样,如果要支持mod_proxy_ajp 需要把ajp的相关c文件包含进来,具体命令:
查找模块路径
find / -name mod_rewrite.c
/root/src/httpd-2.2.17/modules/mappers/mod_rewrite.c
find / -name mod_proxy.c
/root/src/httpd-2.2.17/modules/proxy/mod_proxy.c
/usr/local/apache2/bin/apxs -i -a -c modules/proxy/mod_proxy.c modules/proxy/proxy_util.c
/usr/local/apache2/bin/apxs -i -a -c modules/proxy/mod_proxy_ajp.c modules/proxy/ajp*.c
/usr/local/apache2/bin/apxs -i -a -c modules/mappers/mod_rewrite.c
/usr/local/apache2/bin/apxs -i -a -c modules/proxy/mod_proxy_http.c
/usr/local/apache2/bin/apxs -i -a -c modules/proxy/mod_proxy_ftp.c
/usr/local/apache2/bin/apxs -i -a -c modules/proxy/mod_proxy_balancer.c
/usr/local/apache2/bin/apxs -i -a -c modules/proxy/mod_proxy_connect.c
 在/usr/local/apache2/conf/httpd.conf添加了如下内容
#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
LoadModule proxy_module       modules/mod_proxy.so
LoadModule proxy_ajp_module   modules/mod_proxy_ajp.so
LoadModule rewrite_module     modules/mod_rewrite.so
LoadModule proxy_http_module  modules/mod_proxy_http.so
LoadModule proxy_ftp_module   modules/mod_proxy_ftp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 正向代理
ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
Deny from all
Allow from 192.168.1    //允许1网段的地址从代理出去
</Proxy>

 反向代理

ServerName 192.168.1.180
<VirtualHost *:80>
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /test http://www.163.com/
ProxyPassReverse /test http://www.163.com/
</VirtualHost>

重新启动apache
访问 http://192.168.1.180/Test/ 时,会重新反向代理访至 http://www.163.com

在虚拟主机当中的添加
 <VirtualHost *:80>
    ServerName www.example.com
    DocumentRoot /home/wellpan/html
    <IfModule mod_proxy.c>
        ProxyRequests Off
        <Proxy *>
            Order deny,allow
            Allow from all
        </Proxy>
        ProxyPass /hhsClient/ http://192.168.1.174/hhsClient/
        ProxyPassReverse /hhsClient/ http://192.168.1.174/hhsClient/
    </IfModule>
</VirtualHost>

#######################
ServerName 192.168.166.177
<VirtualHost *:80>
#ServerName 192.168.166.177
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /mhwq/ http://mhwq.91yx.tt/
ProxyPassReverse /mhwq http://mhwq.91yx.tt/
ProxyPass /xian/ http://xian.91yx.tt/
ProxyPassReverse /xian/ http://xian.91yx.tt/
ProxyPass /www/ http://www.91yx.tt/
ProxyPassReverse /xian/ http://www.91yx.tt
</VirtualHost>
#ProxyPass  这项必须有  并且必需要以 / 结尾  否则会导致页面显示异常 出现乱码
#ProxyPassReverse       此项可无,且结果处无限制
#######################
补充:
(一).ProxyPass 指令
说明: 将一个远端服务器映射到本地服务器的URL空间中
语法: ProxyPass [路径] !|url
上下文: 服务器配置, 虚拟主机
状态: Extension
模块: mod_proxy
指令对于您不想对某个子目录进行反向代理时很有用。比如说:
ProxyPass /mirror/foo/i !
ProxyPass /mirror/foo http://foo.com
将会代理除对/mirror/foo/i请求之外的所有对 foo.com 的/mirror/foo请求。
注意:顺序很重要,您需要把特例情况放在一般代理通过指令
当在<Location>配置段中使用时,第一个参数会被忽略而是采用由<Location>指令指定的本地目录。
如果您需要一个更加灵活的反向代理配置,请参见使用[P]标记的RewriteRule指令。
 
(二).ProxyPassReverse 指令
说明: 调整由反向代理服务器发送的HTTP回应头中的URL
语法: ProxyPassReverse [路径] url
上下文: 服务器配置, 虚拟主机
状态: Extension
模块: mod_proxy
此 指令使 Apache 调整HTTP重定向回应中Location, Content-Location和URI头里的URL。 HTTP redirect responses. This is essential when Apache is used as a reverse proxy to avoid by-passing the reverse proxy because of HTTP redirects on the backend servers which stay behind the reverse proxy.
路径是本地虚拟路径的名称。
url远端服务器的部分URL。与ProxyPass指令中的使用方法相同。
(三).实际问题解决及说明:
<IfModule mod_proxy.c>
      ProxyPass /mysys/ http://192.168.8.11:81/mysys/
      ProxyPassReverse /mysys/ http://192.168.8.11:81/mysys/
</IfModule>

①  这里有两个mysys,我们分别叫做叫做path_wapm和path_iis
ProxyPass /path_wapm/
     http://192.168.8.11:81/path_iis/
     path_wapm:这个是虚拟的目录名称,可以任意指定一个
②ProxyPassReverse /path_wapm/
     http://192.168.8.11:81/path_iis/
     path_iis:这个必须通过81端口可以访问的

那么,访问http://wapm服务器/path_wapm的时候,实际访问的将自动转换为了
http://192.168.8.11:81/path_iis/的.
③path_wapm如果不加,就不知道访问哪一个虚拟目录的时候需要使用ASP,
path_iis不加,那么就是访问http://192.168.8.11:81/的效果了
简单来说:就是把IIS站点的一个目录,当作WAPM的一个虚拟目录来访问,
可以是IIS站点的一个子目录,也可以是根目录.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP