1. 程式人生 > 其它 >http nginx防盜鏈 解析

http nginx防盜鏈 解析

技術標籤: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

如果使用者直接在瀏覽器輸入你的圖片地址,那麼圖片顯示正常,因為它符合規則。

  • 在圖片伺服器檢視日誌
    在這裡插入圖片描述