apache 代理转发 配置

来源:互联网 发布:网络通信系统 编辑:程序博客网 时间:2024/06/16 01:58

需求 www.a.com 的所有 请求资源 是 api路径下的转发到 www.b.com

apache 版本:2.4.x
首先开启转发模块:

LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_http_module modules/mod_proxy_http.so

然后配置 vhosts
配置如下:

<VirtualHost *:80>    ServerName www.a.com    DocumentRoot D:/wamp/www/a.com    <Directory "D:/wamp/www/a.com">            Options +Indexes +Includes +FollowSymLinks +MultiViews        AllowOverride All        Require all granted    </Directory>    # ProxyPass / http://www.b.com/    # ProxyPassReverse / http://www.b.com/    ProxyPassMatch ^/api http://www.b.com/</VirtualHost><VirtualHost *:80>    ServerName www.b.com    DocumentRoot D:/wamp/www/b.com    <Directory "D:/wamp/www/b.com">            Options +Indexes +Includes +FollowSymLinks +MultiViews        AllowOverride All        Require all granted    </Directory></VirtualHost>

ProxyPassMatch 指定正则匹配
重启 apache 后可以测试访问

www.a.com 根目录下创建 a0.php 输出 in a0.php 创建api目录 创建 a1.php 输出 in a.com a1.php
然后 在 www.b.com 根目录下 b0.php 输出 in b0.php 创建 api目录 创建 a1.php 输出 in b.com a1.php 创建 b1.php 输出 in b.com b1.php
此时 访问 www.a.com/a0.php 输出 in a0.php
访问 www.a.com/api/a1.php 输出 in b.com a1.php
访问 www.a.com/api/b1.php 输出 in b.com b1.php

如果你需要所有的请求都转发 那么配置这两行即可:

ProxyPass / http://www.b.com/ProxyPassReverse / http://www.b.com/

也可以指定某个请求进行转发

ProxyPass /list http://www.b.com/

ProxyPassReverse 总是 和 ProxyPass 一致即可
如果响应中有302重定向,ProxyPassReverse就派上用场。
假设用户访问http://www.a.com/redir.php,通过转发交给http://www.b.com/redir.php处理,

假定redir.php处理的结果是实现redirect到login.php(使用相对路径,即省略了域名信息),
如果没有配置反向代理,客户端收到的请求响应是重定向操作,并且重定向目的url为http://www.b.com/login.php ,
而这个地址只是代理服务器能访问到的,可想而知,客户端肯定是打不开的,
反之如果配置了反向代理,则会在转交HTTP重定向应答到客户端之前调整它为http://www.a.com/login.php,即是在原请求之后追加上了redirect的路径。当客户端再次请求http://www.a.com/login.php,代理服务器再次工作把其转发到http://www.b.com/login.php。

原创粉丝点击