一篇很好的nginx防盜鏈文章,複製過來學習,連接地址:http://4593973.blog.51cto.com/4583973/1537963html
咱們常常會看到在瀏覽某一圖片時會彈出一「403權限禁止」錯誤,這說明有可能正在瀏覽的這個網站用到的圖片在盜用別的網站圖片,而被盜用的網站採用了防盜鏈技術。那麼怎樣才能不讓本身的網站受害呢?前端
這裏講述的是nginx防盜鏈技術,是nginx。nginx的具體安裝以及相關的優化在這裏很少說了。我用一臺nginx服務器模擬後端服務器,這臺nginx主要用做圖片、gif、swf等靜態服務器(會在這臺服務器上對這些靜態文件作防盜鏈技術),ip地址爲192.168.0.116;又用了一臺apache服務器做爲前端服務器(用apache作前端不是好的選擇,通常都會用nginx作前端,但我這裏只是爲了模擬,這裏的前端服務器僅僅提供一個簡單的主頁界面而已),ip地址爲192.168.0.115。
nginx
在nginx服務器上面的操做:apache
[root@nginx conf]# cat nginx.conf ///nginx的主配置文件後端
user nobody;瀏覽器
worker_processes 1;服務器
pid logs/nginx.pid;app
events {ide
worker_connections 65535;學習
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
include extra/daolian.conf; ///我把防盜鏈技術配置文件獨立出來了,這只是一個習慣而已,能夠不把配置文件獨立出來而是把它們所有放到nginx.conf的http節點裏面。
}
root@nginx extra]# cat daolian.conf ///防盜鏈的具體配置文件放在了/usr/local/nginx/conf/extra目錄下面。
server {
listen 80;
server_name 192.168.0.116; ///被訪問的域名
location ~*.(gif|jpg|png|swf|flv)$ { ///定義對gif/jpg/png/swf/flv等靜態頁面進行防盜
root /usr/local/nginx/html; ///指定上述靜態頁面放在的位置
valid_referers none blocked 192.168.0.115; ///指定哪一個域名能夠訪問本靜態服務器,也能夠是ip地址,這裏我指定的是192.168.0.115,也就是內部的前端apache服務器,只容許這臺訪問。
if ($invalid_referer) {
return 403; ///若是有其餘機器訪問這臺nginx服務器就會給那臺機器返回一個403訪問禁止的頁面,也就是說若是出現了盜用現象就提示403錯誤。
}
}
}
而後在/usr/local/nginx/html目錄下放一張0.jpg的照片做爲測試用(由於這臺nginx服務器就是用來作後端靜態服務器用的,放這張照片僅模擬gif、jpg、swf等諸多靜態頁面。
[root@nginx extra]# /usr/local/nginx/sbin/nginx -s reload ///重啓nginx服務器,使配置文件生效。
到這裏nginx服務器的配置完成,下面對apache服務器進行配置:
[root@apache htdocs]# cat index.html ///我在apache服務器的/usr/local/apache2/htdocs目錄下建立這個主頁,做爲遠端客戶訪問本網站的入口用,即遠在天涯海角的客戶端要想訪問本網站的內容只須要訪問192.168.0.115就能夠進去網站而後訪問全部的內容了。
<html>
<head>
<title>fang dao lian test</title>
</head>
<body>
<font size="10">
<a href="http://192.168.0.116/0.jpg">dao lian picture</a> ///作一個連接,連接後端nginx靜態服務器
<br></br>
</font>
</body>
</html>
[root@apache htdocs]# /usr/local/apache2/bin/apachectl -k restart ///重啓apache,使配置生效。
如今能夠在客戶端瀏覽192.168.0.115測試了,見下圖效果:
在客戶端瀏覽器上輸入網站前端apache的ip時出現了apache的主頁,點擊一下:
點擊以後,瀏覽器正確的到後端nginx服務器找到了須要的照片,瀏覽器中的域名也隨之變成了192.168.0.116,這表示內部的跳轉成功了。分別分析兩臺服務器的訪問日誌也能發現有人訪問了。
下面作一次,假設本網站的前端服務器域名是www.xiaowei.com,不是192.168.0.115了,即192.168.0.115是其餘公司的網站服務器,當有人訪問其餘公司的那個192.168.0.115服務器時,而這臺服務器還想着要來到192.168.0.116這臺nginx服務器上面調用0.jpg這張照片,同時192.168.0.116這臺服務器作了盜鏈技術,192.168.0.116只容許www.xiaowei.com這個本身的域名訪問,其餘公司的ip若要訪問時就視爲盜用而後返回一個錯誤值,具體作法以下:
[root@nginx extra]# cat daolian.conf ///只須要修改這個配置文件就行啦
server {
listen 80;
server_name 192.168.0.116;
location ~*.(gif|jpg|png|swf|flv)$ {
root /usr/local/nginx/html;
valid_referers none blocked www.xiaowei.com; ///只須要將這裏的域名修改爲www.xiaowei.com就能夠啦,其餘配置其餘文件都不須要修改
if ($invalid_referer) {
return 403;
}
}
}
[root@nginx extra]# /usr/local/nginx/sbin/nginx -s reload
再次在客戶端上訪問192.168.0.115,再次點擊連接時,發現彈出了403訪問禁止權限,見下圖,由於這裏的」陌生「的服務器192.168.0.115盜用了192.168.0.116,而192.168.0.116作了防盜鏈技術:
到這裏,若是出現了盜用現象,我就給它弄了403訪問禁止的頁面,可不能夠把它直接跳到本身網站的主頁呢?固然能夠了,假設個人網站的默認主頁是www.hfuu.edu.cn,若是出現了盜用現象,那麼客戶端那面隨之就會看到www.hfuu.edu.cn這個主頁,作法以下:
[root@nginx extra]# cat daolian.conf
server {
listen 80;
server_name 192.168.0.116;
location ~*.(gif|jpg|png|swf|flv)$ {
root /usr/local/nginx/html;
valid_referers none blocked www.xiaowei.com; ///這一行仍舊設置成只容許本身的域名訪問
if ($invalid_referer) {
# return 403;
rewrite ^.*$ http://www.hfuu.edu.cn; ///若是出現了盜用,就直接把用戶的訪問轉到了本身的主頁,這樣作不只避免了盜用,也增長了本身的pv。
}
}
}
[root@nginx extra]# /usr/local/nginx/sbin/nginx -s reload
客戶端再次訪問,點擊連接時,發現瀏覽器自動跳轉到了」本身的網站主頁「www.hfuu.edu.cn,見下圖:
這代表若是出現了盜鏈,用戶訪問會成功跳轉到其餘頁面。
到這裏,nginx的防盜鏈技術描述完成。