靜態文件過時緩存、Nginx防盜鏈、訪問控制

防盜鏈

盜鏈

  • 盜鏈是指服務提供商本身不提供服務的內容,經過技術手段繞過其它有利益的最終用戶界面(如廣告),直接在本身的網站上向最終用戶提供其它服務提供商的服務內容,騙取最終用戶的瀏覽和點擊率。受益者不提供資源或提供不多的資源,而真正的服務提供商卻得不到任何的收益。

防盜鏈

  • 要實現防盜鏈,咱們就必須先理解盜鏈的實現原理,提到防盜鏈的實現原理就不得不從HTTP協議提及,在HTTP協議中,有一個表頭字段叫referer,採用URL的格式來表示從哪兒連接到當前的網頁或文件。換句話說,經過referer,網站能夠檢測目標網頁訪問的來源網頁,若是是資源文件,則能夠跟蹤到顯示它的網頁地址。有了referer跟蹤來源,就能夠經過技術手段來進行處理,一旦檢測到來源不是本站即進行阻止或者返回指定的頁面。

防盜鏈實例

  • 設定目錄訪問受限,配置blog.abc.com網站目錄的訪問受限,編輯虛擬主機配置文件
vi /etc/nginx/conf.d/bbs.aaa.com.conf
  • 添加以下內容
location ~ \.(png|gif|jpeg|bmp|mp3|mp4|flv)$
    {
        valid_referers none blocked server_names *.aaa.com;
        if ($invalid_referer) {
                return 403;
        }
    }
  • 測試配置文件是否有錯誤,並從新加載配置文件
[root@localhost blog.abc.com]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost blog.abc.com]# nginx -s reload
  • 給blog.abc.com上傳一個1.jpeg的圖片
  • 使用curl -e 命令來模擬referer測試防盜鏈是否成功
[root@localhost blog.abc.com]# curl -e "http://wwww.baidu.com" -x127.0.0.1:80 blog.abc.com/1.jpeg -I
HTTP/1.1 403 Forbidden
Server: nginx/1.14.2
Date: Sun, 17 Feb 2019 12:43:02 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
[root@localhost blog.abc.com]# curl -e "http://bbs.aaa.com" -x127.0.0.1:80 blog.abc.com -I
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Sun, 17 Feb 2019 12:48:58 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/7.3.2
Link: <http://blog.abc.com/index.php?rest_route=/>; rel="https://api.w.org/"

Nginx訪問控制

當咱們的網站中有某一站點只是針對公司內部使用,禁止外網使用的時候能夠使用訪問控制來實現php

  1. 編輯虛擬主機配置文件html

    # vim /usr/local/nginx/conf/vhost/test.com.conf
  2. 添加以下內容nginx

    allow 127.0.0.1;   //現實生產中,該白名單地址應設置爲公司外網地址。
             deny all;
  3. 使用curl命令測試,能夠看到,使用指定白名單ip能夠正常訪問,使用沒指定過的ip訪問該站點就會受到限制。vim

    # curl -x127.0.0.1:80 test.com/admin/1.jpg
     fangwen kongzhi ceshi `
     # curl -x192.168.254.131:80 test.com/admin/1.jpg
     <html>
     <head><title>403 Forbidden</title></head>
     <body bgcolor="white">
     <center><h1>403 Forbidden</h1></center>
     <hr><center>nginx/1.15.3</center>
     </body>
     </html>

設定指定目錄下的PHP文件解析受限

  1. 編輯虛擬主機配置文件api

    # vim /usr/local/nginx/conf/vhost/test.com.conf
  2. 添加內容網絡

    location ~ .*(upload|image)/.*\.php$
     {
     deny all;
     }
  3. 在test.com目錄下建立一個upload目錄,並寫一個PHP文件1.phpcurl

  4. 測試配置文件是否有問題,並從新加載ide

    # /usr/local/nginx/sbin/nginx -t
     nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
     nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
     [root[@localhost](https://my.oschina.net/u/570656) ~]# /usr/local/nginx/sbin/nginx -s reload
  5. 使用curl測試限制解析是否成功,能夠看到返回的代碼是403,表示限制解析成功測試

    [root[@localhost](https://my.oschina.net/u/570656) ~]# curl -x127.0.0.1:80 test.com/upload/1.php 
     <html>
     <head><title>403 Forbidden</title></head>

根據user_agent限制訪問(能夠拒絕網絡爬蟲爬走網站內容)

好比我想讓誰訪問個人網站,我就告訴他域名,若是不告訴別人域名,就說明我不想讓他知道個人站點,這須要禁止搜索引擎在網絡上爬取站點內容。能夠經過user_agent來限制。網站

  1. 編輯虛擬主機文件

    [root[@localhost](https://my.oschina.net/u/570656) ~]# vim /usr/local/nginx/conf/vhost/test.com.conf
  2. 添加以下內容

    if ($http_user_agent ~* 'Spider/3.0|baidu|YoudaoBot|Tomato')
     {
     return 403;
     }
  3. 測試並從新加載配置文件 ..-t ...-s reload

  4. 使用curl測試,curl -A 能夠模擬user_agent,發現返回的代碼是403,表示實驗成功。

    [root[@localhost](https://my.oschina.net/u/570656) ~]# curl -A "www.baidu.com" -x127.0.0.1:80 test.com -I
     HTTP/1.1 403 Forbidden
     Server: nginx/1.15.3
     Date: Tue, 04 Sep 2018 17:57:37 GMT
     Content-Type: text/html
     Content-Length: 169
     Connection: keep-alive
相關文章
相關標籤/搜索