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>
重新启动apache
在虚拟主机当中的添加
<VirtualHost *:80> ServerName www.example.com DocumentRoot /home/wellpan/html
#######################
ServerName 192.168.166.177 <VirtualHost *:80>
#ServerName 192.168.166.177
</VirtualHost>
#ProxyPass 这项必须有 并且必需要以 / 结尾 否则会导致页面显示异常 出现乱码 #ProxyPassReverse 此项可无,且结果处无限制
####################### 补充:
(一).ProxyPass 指令 说明: 将一个远端服务器映射到本地服务器的URL空间中 语法: ProxyPass [路径] !|url 上下文: 服务器配置, 虚拟主机 状态: Extension 模块: mod_proxy
指令对于您不想对某个子目录进行反向代理时很有用。比如说:
将会代理除对/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指令中的使用方法相同。
① 这里有两个mysys,我们分别叫做叫做path_wapm和path_iis
③path_wapm如果不加,就不知道访问哪一个虚拟目录的时候需要使用ASP,
简单来说:就是把IIS站点的一个目录,当作WAPM的一个虚拟目录来访问, 可以是IIS站点的一个子目录,也可以是根目录.
|