需求 www.a.com 的所有 请求资源 是 api路径下的转发到 www.b.com
apache 版本:2.4.x
首先开启转发模块:
LoadModule proxy_module modules/mod_proxy.so
LoadModule 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。
此文章通过 python 爬虫创建,原文是自己的csdn 地址: apache 代理转发 配置