首先來了解一下什麼是盜鏈,全稱是盜取連接,假如咱們的網站有不少好看的圖片,別人能夠查看咱們網站圖片的連接,而後應用在他的網站上,這樣的話,去訪問他的網站,實際上消耗的是咱們的流量(由於實際連接在咱們這裏),這樣咱們就不得不去配置防盜鏈,使得別人不能複製咱們圖片的連接。php
一、編輯虛擬主機配置文件apache
# vim /usr/local/apache2.4/conf/extra/httpd-vhost.confvim
在文件中加入如下內容:瀏覽器
<Directory /data/wwwroot/111.com>服務器
SetEnvIfNoCase Referer "http://www.111.com" local_refcurl
SetEnvIfNoCase Referer "http://111.com" local_ref測試
SetEnvIfNoCase Referer "^$" local_ref網站
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">url
Order Allow.Denyspa
Allow from env=local_ref
</filesmatch>
</Directory>
其中 SetEnvIfNoCase Referer的三行內容是設置白名單
txt|doc|mp3|zip|rar|jpg|gif|png 表示防盜鏈防盜的對象,設置後,這些類型的文件就不能被白名單外的第三方引用
Order用於定義順序,是先容許仍是先拒絕
二、驗證
首先將配置文件中的空referer一行隱藏
而後開啓apache服務
# /usr/loacl/apache2.4/bin/apachectl -t
# /usr/local/apache2.4/bin/apachectl start
這時咱們在瀏覽器輸入111.com/hw.jpg來訪問服務器上hw.jpg這張圖片時,出現以下提示
可是若是在白名單的網站上咱們發一個帖子,在帖子中加入111.com/hw.jpg這個連接,經過帖子連接跳轉又能正常訪問
如今咱們將配置文件中的空referer一行的#號去掉,從新加載配置文件後,咱們再在瀏覽器輸入111.com/hw.jpg來訪問服務器上hw.jpg這張圖片時,就能正常訪問了
以上實驗能夠看出:"^$"空的referer指的是從瀏覽器輸入圖片地址直接訪問,沒有跳轉連接,
咱們再來經過curl作實驗,當前空referer行未被隱藏
先直接訪問,空referer狀態,結果訪問成功:
再來模擬一個不在白名單中的referer訪問圖片,結果被拒絕訪問:
只容許白名單內的IP訪問指定的目錄
一、修改配置文件
配置文件中加入如下內容:
<Directory /data/wwwroot/111.com/admin/>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Directory>
以上Order用於定義順序,是先執行deny仍是先執行allow,若是Order後先是allow那麼就會先執行allow的語句,若是先是deny,就會先執行deny的語句,它有一個特色是:不管是否匹配到指定的IP,都會從頭到尾將語句執行完;admin/爲指定的訪問控制的目錄
建立訪問控制目錄及子文件
二、從新加載配置文件
# /usr/local/apache2.4/bin/apachectl -t
# /usr/local/apache2.4/bin/apachectl graceful
三、測試訪問控制
# curl -x127.0.0.1:80 111.com/admin/index.php -I //此處指定了目標IP,未指定源IP,默認源訪問IP同目標IP一致;源IP在配置文件的白名單內,訪問200 OK
# curl -x192.168.31.157:80 111.com/admin/index.php -I //此處指定了目標IP,未指定源IP,默認源訪問IP同目標IP一致,源IP不在配置文件的白名單內,訪問403 Forbidden
咱們來查看訪問日誌記錄
# tail /usr/local/apache2.4/logs/111.com-access_log
再來測試經過物理機訪問虛擬機
在瀏覽器輸入111.com/admin/index.com結果也提示被禁止訪問
只有指定的IP才能訪問匹配的文件或者說是連接
一、編輯配置文件
在配置文件中加入如下內容
<Directory /data/wwwroot/111.com/>
<filesmatch admin.php(.*)>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</filesmatch>
</Directory>
以上表示匹配admin.php(.*)文件或連接只有指定的IP能訪問
二、從新加載配置文件
# /usr/local/apache2.4/bin/apachectl -t
# /usr/local/apache2.4/bin/apachectl graceful
三、測試驗證
# curl -x192.168.31.157:80 111.com/sfdfsfs -I //如下結果表示找不到這個頁面
# curl -x192.168.31.157:80 111.com/admin.php?sfdfsfs -I //如下結果表示不容許源IP訪問
# curl -x127.0.0.1:80 111.com/admin.php?dfdfdfdfdfd -I //如下結果表示已經容許的源IP的訪問,只是找不到對應的頁面
推薦連接
幾種限制ip的方法 http://ask.apelearn.com/question/6519
apache 自定義header http://ask.apelearn.com/question/830
apache的keepalive和keepalivetimeout http://ask.apelearn.com/question/556