使用Apache打造完美限制的HTTP下載服務器

      話說現在建站真不容易,想好好搞一個下載站,總會被人WC的採集,盜鏈,攻擊,無人值守的垃圾站比苦心經營的站收入還要可觀。所以保衛好自己的服務器是一件很重要的工作。
 
      3G軟件站(www.3grjz.com)剛剛上線,立馬受到很多朋友的支持和擁護。一開始本來準備選擇使用FTP作爲下載服務器的,不過過了幾天就發現很多都是通過盜鏈的方式來FTP下載。這下服務器在持續性全速提供上傳,但是網站的頁面瀏覽量卻少得可憐。因爲FTP天生不能放盜鏈的特性所以只能考慮放棄使用,最後決定用HTTP下載來替代。

  直接用HTTP服務器下載也不是很容易的事。最開始在IIS裏面配置,IIS只能設定最大下載速度和最大連接數,這對於一些使用下載工具一來就開50+線程霸道下載的朋友明顯是防不住的。網上搜了N久就發現一個用Delphi寫的看不懂的ISAPI Filter以及別的收費軟件若干。試過之後都起不了作用,也便放棄了,最後發現Apache有這些開源的功能模塊,最終打造出完美限制的HTTP下載服務器。

  首先說說完美限制的意思:防盜鏈、限制客戶端下載線程數,限制下載帶寬。下面一一介紹怎麼在Apache裏面實現這些功能。

  防盜鏈

  傳統的防盜鏈都是通過Referer來判斷用戶來路的,不過這樣的方法對於下載工具來說形同虛設,因爲現在的下載工具早就能僞造Referer了。

  現在一些流行的防盜鏈的方式都是用在瀏覽頁面的時候產生一個隨機驗證碼,在用戶點擊連接的時候服務器會驗證這個驗證碼是否有效從而決定是否允許下載。或者就是用某些方法把文件實際地址進行僞裝。不過我覺得這些都不怎麼好用,我用了一個簡單有效的方式來實現防盜鏈。

  其實就是用Cookie,配合Apache的URL Rewrite模塊很簡單的就能實現防盜鏈下載。
  首先在瀏覽頁面的時候,會向客戶端發送一個特別的Cookie,例如“Site=3grjz.com“,盜鏈而來的將沒有這個Cookie。

  在Apache的httpd.conf文件裏面搜索:

  #LoadModule rewrite_module modules/mod_rewrite.so

  把它前面的#去掉,再找到<Directory />塊,在裏面加入類似如下代碼:

  <Directory />
  # Other configurations …
  RewriteEngine On   # 啓動URL Rewrite引擎
  RewriteCond   %{HTTP_COOKIE} !^.*(?:Site=3grjz.com).*$   # 對於Cookie裏面沒有特殊記錄的請求進行重定向

  RewriteRule ^.*$ error.html # 將非法訪問重定向到錯誤頁面
  </Directory>

  這樣如果一個盜鏈而來的請求將會因爲沒有特殊Cookie而被重定向到錯誤頁面,就算實際地址暴露也不怕。至於這個Cookie的內容是什麼以及有效時間完全可以由管理員自己來設定,也就是說下載工具也沒法僞造,從而防止了服務器資源被盜鏈的危險。

  限制客戶端多線程下載操作流程

  限制多線程現在需要用到一個Apache的擴展模塊mod_limitipconn,這裏是作者的官方網站http://dominia.org/djao/limitipconn2.html,先下載適合自己版本的模塊文件到Apache安裝目錄下的modules目錄下面,然後在httpd.conf文件中搜索:

  #LoadModule status_module modules/mod_status.so

  把它前面的#去掉,再加入:

  ExtendedStatus On
  LoadModule limitipconn_module modules/mod_limitipconn.dll 
# 如果你下載的不是Win版,請把後面的文件名改爲你所下載的文件名

  <IfModule mod_limitipconn.c>

  <Location /> # 這裏表示限制根目錄,即全部限制,可以根據需要修改
  MaxConnPerIP 2 # 這裏表示最多同時兩個線程
  NoLimit html/* # 這裏表示html目錄下不受限制
  </Location>
  </IfModule>

  這樣來自同一客戶端的超過2個的線程請求將被拒絕,從而限制了客戶端的多線程下載。

  限制下載帶寬操作流程

  這個同樣需要擴展模塊支持,模塊是mod_bw,在作者的官方網站http://ivn.cl/apache/可以下載到。同樣也是放入modules目錄下面,然後在httpd.conf文件中加入:

  LoadModule bw_module modules/mod_bw.dll
  再找到<Directory />塊,加入:
  <Directory />
  # Other configurations …
  BandwidthModule On # 啓動帶寬限制
  ForceBandwidthModule On # 啓動帶寬限制
  MaxConnection all 2000 # 最大連接數2000
  Bandwidth all 200000 # 單個客戶端最大帶寬200KB
  </Directory>

  這樣限制了同時最多2000個連接數,每個客戶端最大200KB的下載帶寬。

  到此,我們的完美限制的HTTP下載服務器就配置完成了,重新啓動你的Apache這些功能便能生效了。因爲Apache和這些模塊都是開源免費的,我們不需要爲此掏一分錢,不用去購買那些第三方的軟件,只是需要多去了解一下這些軟件的使用說明。不要一切都祈禱有現成美好的東西,自己動手做一次會有不一樣的收穫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章