http nginx防盜鏈 解析
阿新 • • 發佈:2021-02-01
技術標籤:HTTP nginx 服務中介軟體nginxhttp
文章目錄
nginx 防盜鏈
- 兩個網站 A 和 B, B網站引用了A網站上的圖片,這種行為就叫做盜鏈。 防盜鏈,就是要防止B引用A的圖片。
1,nginx防止網站資源被盜用模組
ngx_http_referer_module
如何區分不正常的使用者
http Referer 是Header的一部分,當瀏覽器向Webf服務傳送請求的時候,一般會帶上Referer,告訴伺服器我是從哪個頁面連結過來的,伺服器藉此可以獲得一些資訊用於處理,
- 例如防止未經允許的網站盜鏈圖片、檔案等。因此HTTP Referer頭資訊是可以通過程式來偽裝生成的,所以通過Referer資訊防盜鏈並非100%可靠,但是,它能夠限制大部分的盜鏈情況。
2,防盜鏈配置
配置藥店
[[email protected] ~]# vim /etc/nginx/nginx.conf # 日誌格式新增"$http_referer" log_format main '$remote_addr - $remote_user [$time_local] "$request" '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # valid_referers 使用方式 Syntax: valid_referers none | blocked | server_names | string ...; Default: — Context: server, location
-
none : 允許沒有http_referer的請求訪問資源;
-
blocked : 允許不是http://開頭的,不帶協議的請求訪問資源—被防火牆過濾掉的;
-
server_names : 只允許指定ip/域名來的請求訪問資源(白名單);
配置圖片網站伺服器
圖片網站伺服器:上傳圖片192.168.1.9
[[email protected] ~]# cp test.jpg /usr/share/nginx/html/
[[email protected] ~]# cd /etc/nginx/conf.d/
[[email protected] conf.d]# cp default.conf default.conf.bak
[ [email protected] conf.d]# mv default.conf nginx.conf
[[email protected] conf.d]# vim nginx.conf
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
[[email protected] conf.d]# nginx -t
[[email protected] conf.d]# systemctl restart nginx
訪問<192.168.1.9/test.jpg> 就可以訪問到你上傳的那個圖片
Referer:這個匹配的連線為空 “-”
配置盜鏈伺服器
[[email protected] html]# cat /etc/nginx/conf.d/qf.conf
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
[[email protected] ~]# cd /usr/share/nginx/html/
[[email protected] html]# cp index.html index.html.bak
[[email protected] html]# vim index.html
<html>
<head>
<meta charset="utf-8">
<title>qf.com</title>
</head>
<body style="background-color:red;">
<img src="http://192.168.1.9/test.jpg"/>
</body>
</html>
[[email protected] html]# systemctl restart nginx
訪問<192.168.1.10> 就可以訪問到圖片伺服器上傳的那個圖片
Referer記錄了:連線是1.10這臺機器。
圖片伺服器防盜鏈設定
[[email protected] conf.d]# vim nginx.conf
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
valid_referers none blocked www.jd.com;
#允許這些訪問
if ($invalid_referer) {
return 403;
}
}
}
[[email protected] conf.d]# systemctl restart nginx
訪問<192.168.1.10> 盜鏈伺服器就不可以訪問到圖片伺服器上傳的那個圖片
配置防盜鏈並允許指定IP訪問盜鏈
server {
listen 80;
server_name localhost;
location ~ .*\.(gif|jpg|png|jpeg)$ {
root /usr/share/nginx/html;
valid_referers none blocked *.qf.com 192.168.1.10;
if ($invalid_referer) {
return 403;
}
}
}
因為none允許為空值訪問,所以加不加ip都可以訪問,如果把none擦除,就不可以了
過載nginx服務
[[email protected] ~]# nginx -s reload
網站測試
測試不帶http_refer:
[[email protected] conf.d]# curl -I "http://192.168.1.9/test.jpg"
HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Mon, 02 Sep 2019 14:02:56 GMT
Content-Type: image/jpeg
Content-Length: 27961
Last-Modified: Mon, 02 Sep 2019 13:23:12 GMT
Connection: keep-alive
ETag: "5d6d17c0-6d39"
Accept-Ranges: bytes
測試帶非法http_refer:
[[email protected] conf.d]# curl -e http://www.baidu.com -I "http://192.168.1.9/test.jpg"
HTTP/1.1 403 Forbidden
Server: nginx/1.16.1
Date: Mon, 02 Sep 2019 14:03:48 GMT
Content-Type: text/html
Content-Length: 153
Connection: keep-alive
測試帶合法的http_refer:
[[email protected] conf.d]# curl -e http://www.qf.com -I "http://192.168.1.9/test.jpg"
HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Mon, 02 Sep 2019 14:04:52 GMT
Content-Type: image/jpeg
Content-Length: 27961
Last-Modified: Mon, 02 Sep 2019 13:23:12 GMT
Connection: keep-alive
ETag: "5d6d17c0-6d39"
Accept-Ranges: bytes
[[email protected] conf.d]# curl -e http://192.168.1.10 -I "http://192.168.1.9/test.jpg"
HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Mon, 02 Sep 2019 14:05:36 GMT
Content-Type: image/jpeg
Content-Length: 27961
Last-Modified: Mon, 02 Sep 2019 13:23:12 GMT
Connection: keep-alive
ETag: "5d6d17c0-6d39"
Accept-Ranges: bytes
如果使用者直接在瀏覽器輸入你的圖片地址,那麼圖片顯示正常,因為它符合規則。
- 在圖片伺服器檢視日誌