先說說正向代理的概念:
正向代理,,也就是傳說中的代理,,他的工作原理就像一個跳板。簡單的說,,我是一個用戶,,我訪問不了某網(wǎng)站,,但是我能訪問一個代理服務(wù)器。這個代理服務(wù)器呢,,他能訪問那個我不能訪問的網(wǎng)站,,于是我先連上代理服務(wù)器,告訴他我需要那個無法訪問網(wǎng)站的內(nèi)容,,代理服務(wù)器去取回來,,然后返回給我。從網(wǎng)站的角度,,只在代理服務(wù)器來取內(nèi)容的時候有一次記錄,,有時候并不知道是用戶的請求,也隱藏了用戶的資料,,這取決于代理告不告訴網(wǎng)站,。
結(jié)論就是,正向代理是一個位于客戶端和原始服務(wù)器(origin server)之間的服務(wù)器,,為了從原始服務(wù)器取得內(nèi)容,,客戶端向代理發(fā)送一個請求并指定目標(biāo)(原始服務(wù)器),然后代理向原始服務(wù)器轉(zhuǎn)交請求并將獲得的內(nèi)容返回給客戶端,??蛻舳吮仨氁M(jìn)行一些特別的設(shè)置才能使用正向代理。
那么反向代理的概念呢,?
比如用戶訪問 http://www.nowamagic.net/librarys/veda 這個頁面,,但www.nowamagic.net實際上并不存在這個頁面,他是偷偷從另外一臺服務(wù)器上取回來,,然后作為自己的內(nèi)容吐給用戶,。
但用戶并不知情,這很正常,,用戶一般都很笨,。這里所提到的 www.nowamagic.net 這個域名對應(yīng)的服務(wù)器就設(shè)置了反向代理功能。
結(jié)論就是反向代理正好相反,,對于客戶端而言它就像是原始服務(wù)器,,并且客戶端不需要進(jìn)行任何特別的設(shè)置??蛻舳讼蚍聪虼?的命名空間(name-space)中的內(nèi)容發(fā)送普通請求,,接著反向代理將判斷向何處(原始服務(wù)器)轉(zhuǎn)交請求,并將獲得的內(nèi)容返回給客戶端,,就像這些內(nèi)容原本就是它自己的一樣,。
惡意反向代理的危害
網(wǎng)站被惡意反向代理有什么危害呢?這里列舉一下:
?首先肯定會占用服務(wù)器資源,,網(wǎng)站打開速度受影響,。
?其次,,別人通過代理盜用你的網(wǎng)站數(shù)據(jù),對用戶與不是那么智能的搜索引擎而言,,相當(dāng)于建了一個與你一模一樣的站點,,那么很有可能你的站點會進(jìn)搜索引擎沙箱,甚至被降權(quán),。
?如果被惡意代理的頁面,,還掛有你的聯(lián)盟廣告(比如Adsense),這就十分危險了,,如果有人點擊了上面的廣告,,很容易被Adsense封號。
?還有很多危害,,讀者可以自行腦補(bǔ)……
js 級別的解決方案
<script type="text/javascript">
if (document.domain != 'nowamagic.net' && document.domain != 'www.nowamagic.net'){
window.location.;
}
</script>
腳本很簡單,,如果地址欄中的網(wǎng)址不是 nowamagic.net 和 www.nowamagic.net 中的任何一個,那么就把地址欄轉(zhuǎn)向 http://www.nowamagic.net/ ,。這段代碼同樣可以避免被人使用反向代理技術(shù)“偽造”一個跟自己一模一樣的網(wǎng)站。
題外話:如何防止網(wǎng)站被iframe嵌入,。有些人用iframe做了個框架,,把我們網(wǎng)站嵌入其中,訪客來瀏覽的時候,,好像是在瀏覽他自己的網(wǎng)站一樣,,那么如何解決呢?以下方法可破:
<script type="text/javascript">
<!--
if (top.location != self.location)top.location=self.location;
// -->
</script>
php 級別的解決方案
js 級別的解決方案雖然能夠讓惡意代理頁面跳回來,,但是對搜索引擎不怎么友好,。下面是服務(wù)器端(PHP)的解決方案,代碼比較簡單,,就不多說了,。
$proxy_rs = $this -> proxy_filter();
if( $proxy_rs != 'nowamagic.net' || $proxy_rs != 'www.nowamagic.net' )
{
echo '非法反向代理訪問';
//header('Location: http://www.nowamagic.net/');
exit;
}
public function proxy_filter()
{
/*
$svrUrl = 'http://' . $_SERVER['SERVER_NAME'].$_SERVER["PHP_SELF"];
if (!empty($_SERVER["QUERY_STRING"]))
{
$svrUrl .= "?".$_SERVER["QUERY_STRING"];
}
return $svrUrl;
*/
return $_SERVER['SERVER_NAME'];
}
htaccess 級別的解決方案
.htaccess
RewriteEngine On
RewriteBase /
php_value auto_append_file proxy.php
proxy.php
<?php
$f = getenv("HTTP_X_FORWARDED_FOR");
$server = getenv("HTTP_HOST");
if (($f!="")&&($server!="nowamagic.net")&&($server!="www.nowamagic.net")){
echo '本服務(wù)器禁止惡意反向代理!';
}
?>
這個由于我網(wǎng)站的特殊性,,沒試驗過,,但是網(wǎng)上常用這種方法。
Apache httpd.conf 級別的解決方案
這個 Apache 上如何禁止我還沒搗鼓出來,, Nginx 倒可以,,但是我用的是 Apache,如果你知道,,請告訴我下~