nginx讀寫分離與防盜鏈

讀寫分離

環境

這裏的服務器地址爲虛擬ip,由於我是在個人三臺雲主機上操做的
192.168.0.10 nginx前端
192.168.0.20 httpd(用於讀)
192.168.0.30 httpd(用於寫)html

什麼是WebDAV?

Web分佈式創做和版本控制(WebDAV)是超文本傳輸​​協議(HTTP)的擴展,容許客戶端執行遠程Web內容創做操做。實質上,它使Web服務器能夠充當文件服務器,容許做者在Web內容上進行協做。使應用程序可直接對Web Server直接讀寫,並支持寫文件鎖定(Locking)及解鎖(Unlock),還能夠支持文件的版本控制。各類服務器都支持WebDAV,包括Apache,Microsoft的Internet信息系統,SabreDAV,Nginx,ownCloud和Nextcloud。前端

在寫服務器上開啓WebDAV功能

vim /etc/httpd/conf/httpd.conf

<Directory "/var/www/html">
    Dav on
</Directory>

重啓httpd服務

systemctl restart httpdnginx

授予讀寫服務器網站的訪問權限

爲防止網站訪問權限不足,須要分別爲讀寫服務器的網站目錄授予訪問權限apache

setfacl -m u:apache:rwx /var/www/html/

添加讀寫服務器的首頁文件

[root@192.168.0.20]# echo 192.168.0.20 > /var/www/html/index.html
[root@192.168.0.30]# echo 192.168.0.30 > /var/www/html/index.html

進行上傳文件測試

分別往讀寫服務器上上傳文件,寫服務器成功上傳,因爲讀服務器沒有開啓WebDAV功能,因此讀服務器報405錯誤。 vim

curl -T zz.txt http://192.168.0.20 (讀服務器)
curl -T zz.txt http://192.168.0.30 (寫服務器)

nginx讀寫分離與防盜鏈

在寫服務器的網站根目錄也能夠看到上傳的文件
nginx讀寫分離與防盜鏈 瀏覽器

在nginx前端配置讀寫分離

編輯nginx配置文件

location /wanger {
            root   html;
            index  index.html index.htm;
            proxy_pass  http://192.168.0.20/;
            if ($request_method = "PUT"){
                      proxy_pass  http://192.168.0.30;
            }
        }

重載nginx

nginx -s reload

進行訪問測試

[root@192.168.0.10 ~]# curl 127.0.0.1/
192.168.0.20
[root@192.168.0.10 ~]# curl -T sh.txt 127.0.0.1/

nginx讀寫分離與防盜鏈

能夠看到寫服務器已經存在咱們剛上傳的文件了,讀寫分離測試完成緩存

防盜鏈

什麼是盜鏈

盜鏈指的是經過一些技術手段來獲取他人服務器上的資源來展現在本身的網站上,而在本身的服務器並無存儲這個資源,經過盜鏈,使他人的的網站服務器壓力負擔變大。經過藉助nginx的ngx_http_referer_module模塊的valid_referers指令能夠防止盜鏈,可是referer是能夠僞造的,所以也只能防住一部分的盜鏈。服務器

valid_referers語法

語法 valid_referers none丨 blocked丨 server_names 丨 string ...;
默認 -
應用位置 server,location

參數說明

  • none:referer字段爲空
  • blocked:Referer的值被防火牆或者代理服務器刪除或假裝
  • server_names:一個或多個服務器列表,檢測Referer的值是不是列表中的某個
  • $invalid_referer:內置變量,若是來源域名不在這個列表中,那麼$invalid_referer變量的值爲0,不然爲1

    盜鏈演示

    首先準備兩臺服務器,地址分別爲172.17.51.80,172.17.51.90,其中172.17.51.80爲被盜鏈服務器,咱們首先配置一下172.17.51.80的圖片地址,將圖片放入網站根目錄
    nginx讀寫分離與防盜鏈 curl

而後配置172.17.51.90服務器進行盜鏈HTML的配置,在網站根目錄下編輯index.html,並添加172.17.51.80的圖片連接
html代碼以下: 分佈式

<a href="www.baidu.com">
<img src="http://172.17.51.80/a.jpg" /></a>

而後訪問172.17.51.90查看盜鏈效果,盜鏈成功,這裏我使用的是個人兩臺雲主機
nginx讀寫分離與防盜鏈

防盜鏈演示

修改172.17.51.80配置,對referer頭進行過濾

location ~ .*\.(jpg|gif|png)$ {
    valid_referers none blocked .*wanger.com;
    if ($invalid_referer) {
        #rewrite ^/ http://$host/403.png;
        return 403;
    }
}

修改完成後重載nginx,並清除瀏覽器緩存,再次訪問能夠看到圖片掛了
nginx讀寫分離與防盜鏈


歡迎各×××陳師傅」
nginx讀寫分離與防盜鏈

相關文章
相關標籤/搜索