Apache配置正向代理与反向代理
1. 正向代理
配置正向代理很简单,只需要在浏览器的Proxy选项里加入你的Apache配置的vHost主机即可
?
1.1?Apache配置 httpd-vhosts.conf(以Windows下为例)<VirtualHost *:80> ServerAdmin prograsliu@gmail.com DocumentRoot "D:/www/test" ServerName www.test.com ServerAlias test.com ErrorLog "logs/test.com-error.log" CustomLog "logs/test.com-access.log" common Alias /sublook "D:/www/test/look/sublook/" <Directory "D:/www/test"> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> #正向代理设置 ProxyRequests On ProxyVia On <Proxy *> Order deny,allow Deny from all Allow from 127.0.0.1 </Proxy></VirtualHost>
?
?
现在看正向代理设置那一段
引用Apache2.2官方文档中对ProxyVia的解释如下:
Off
?,将不会采取特殊的处理。如果一个请求或应答包含"Via:
"头,将不进行任何修改而直接通过。如果设置为On
每个请求和应答都会对应当前主机得到一个"Via:
"头。如果设置为Full
?,每个产生的"Via:
"头中都会额外加入Apache服务器的版本,以"Via:
"注释域出现。如果设置为Block
?,每个代理请求中的所有"Via:
"头行都将被删除。且不会产生新的"Via:
"头。?
1.3 访问效果访问 www.sina.com,观察HTTP请求Response:
可以看到,Via:www.test.com,正向代理成功了。
?
2. 反向代理2.1 Apache设置1 <VirtualHost *:80> 2 ServerAdmin prograsliu@gmail.com 3 DocumentRoot "D:/www/test" 4 ServerName www.test.com 5 ServerAlias test.com 6 ErrorLog "logs/test.com-error.log" 7 CustomLog "logs/test.com-access.log" common 8 Alias /sublook "D:/www/test/look/sublook/" 9 <Directory "D:/www/test">10 Options FollowSymLinks11 AllowOverride All12 Order allow,deny13 Allow from all14 </Directory>15 16 #反向代理设置17 ProxyPass /proxy http://www.proxypass.com/proxy18 ProxyPassReverse /proxy http://www.proxypass.com/proxy19 20 </VirtualHost>21 22 <VirtualHost *:80>23 ServerAdmin prograsliu@gmail.com24 DocumentRoot "D:/www/proxypass"25 ServerName www.proxypass.com26 ServerAlias proxypass.com27 <Directory "D:/www/proxypass">28 Options FollowSymLinks29 AllowOverride All30 Order allow,deny31 Allow from all32 </Directory>33 </VirtualHost>
?
?
现在看反向代理设置那一段
?www.proxypass.com/proxy/login.php 中有如下代码:
可以发现其实Request中的请求还是 www.test.com?的,但是它确实是由 www.proxypass.com?来处理的
页面显示
?in proxypass.com
HTTP请求如图:
也可以看到请求依然是 www.test.com/proxy/result.php
这里就是 ProxyPassReverse 发挥作用的地方,如果不加这个项,重定向后HTTP请求会如下图: