正向代理,也就是傳說中的代理,他的工作原理就像一個跳板,
簡單的說,
我是一個使用者,我訪問不了某網站,但是我能訪問一個代理伺服器
這個代理伺服器呢,他能訪問那個我不能訪問的網站
於是我先連上代理伺服器,告訴他我需要那個無法訪問網站的內容
代理伺服器去取回,然後返回給我
從網站的角度,只在代理伺服器來取內容的時候有一次記錄
有時並不知道是用戶的請求,也隱藏了用戶的資料,這取決於代理告不告訴網站
結論就是正向代理是一個位於客戶端和原始伺服器(origin server)之間的伺服器,為了從原始伺服器取得內容,客戶端向代理程式發送一個請求並指定目標(原始伺服器),然後代理程式向原始伺服器轉交請求並將獲得的內容傳回給客戶端。客戶端必須要進行一些特別的設定才能使用正向代理。
啟用Apache代理模組
a2enmod proxy a2enmod proxy_http
設定正向代理程式很簡單,只需要在瀏覽器的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>
現在看正向代理設定那一段
ProxyRequests On:開啟Apache正向代理
ProxyVia On:控制位於代理伺服器鏈中的代理請求的流向
引用Apache2.2官方文件中對ProxyVia的解釋如下:
1.如果設定為預設值Off ,將不會採取特殊的處理。如果一個請求或應答包含"Via:"頭,將不進行任何修改而直接通過。
2.如果設定為On每個請求和應答都會對應目前主機得到一個"Via:"頭。
3.如果設定為Full ,每個產生的"Via:"頭中都會額外加入Apache伺服器的版本,以"Via:"註解網域出現。
4.如果設定為Block ,每個代理請求中的所有"Via:"頭行都將被刪除。且不會產生新的"Via:"頭。
<Proxy *> Order deny,allow Deny from all Allow from 127.0.0.1 </Proxy>
此處設定為本機可以使用代理,真正使用的時候就自己設定了
1.2 瀏覽器設定(以FireFox為例)
##1.3 存取效果
訪問www.sina.com,觀察HTTP請求Response:
#可以看到,Via:www.test.com,正向代理成功了。
範例使用者造訪http://test.me/readme
但test. me上並不存在readme頁面
他是偷偷從另外一台伺服器上取回,然後作為自己的內容吐給用戶
结论就是 反向代理正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理 的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容 原本就是它自己的一样。
2.1 Apache设置
<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> #反向代理设置 ProxyPass /proxy http://www.proxypass.com/proxy ProxyPassReverse /proxy http://www.proxypass.com/proxy </VirtualHost> <VirtualHost *:80> ServerAdmin prograsliu@gmail.com DocumentRoot "D:/www/proxypass" ServerName www.proxypass.com ServerAlias proxypass.com <Directory "D:/www/proxypass"> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
现在看反向代理设置那一段
ProxyPass /proxy http://www.proxypass.com/proxy : 将 www.test.com/proxy 域下的所有请求转发给 www.proxypass.com/proxy 代理,例如 www.test.com/proxy/login.php 会交给 www.proxypass.com/proxy/login.php 代理
ProxyPassReverse /proxy http://www.proxypass.com/proxy :
www.proxypass.com/proxy/login.php 中有如下代码:
<?php header('Location: http://www.proxypass.com/proxy/result.php'); ?>
那么在重定向的时候,Apache会将HTTP请求重新设为 http://www.test.com/proxy/result.php, 这样的作用稍后讲解
www.proxypass.com/proxy/result.php 中有如下代码:
<?php echo 'in proxypass.com <br>'; ?>
2.2 浏览器访问效果
访问 www.test.com/proxy/login.php
Apache将请求交给 www.proxypass.com/proxy/login.php 代理,HTTP请求如图:
可以发现其实Request中的请求还是 www.test.com 的,但是它确实是由 www.proxypass.com 来处理的
proxypass.com/proxy/login.php 重定向到 proxypass.com/proxy/result.php
页面显示 in
proxypass.com
HTTP请求如图:
也可以看到请求依然是 www.test.com/proxy/result.php
这里就是 ProxyPassReverse 发挥作用的地方,如果不加这个项,重定向后HTTP请求会如下图:
可以发现请求中的GET是 www.proxypass.com 而不是 www.test.com ,这是因为配置了ProxyPassReverse后,proxypass.com/proxy/login.php 在重定向到 proxypass.com/proxy/result.php 时,Apache会将它调整回 test.com/proxy/result.php , 然后Apache再将 test.com/proxy/result.php 代理给 proxypass.com/proxy/result.php,所以说配置了
ProxyPassReverse 后,即使 proxypass.com/proxy 下的程序有重定向到其他 proxypss.com/proxy 的文件的(如 login.php 重定向到 result.php),你也不会在请求中发现 proxypass.com 的影子。
从用途上来讲:
正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。
正向代理还可以使用缓冲特性减少网络使用率。
反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。
反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。
另外,反向代理还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。
從安全性 來講:
正向代理程式允許客戶端透過它存取任意網站並且隱藏客戶端自身,因此你必須採取安全措施以確保僅為經過授權的客戶端提供服務。
反向代理對外都是透明的,訪客並不知道自己存取的是一個代理。
本文說明了正向代理與反向代理的區別,更多相關內容請關注php中文網。
相關推薦:
介紹自動登入google play下載app report 的相關內容
以上是了解正向代理與反向代理的差異的詳細內容。更多資訊請關注PHP中文網其他相關文章!