Apache深度優化

  • 2019 年 12 月 24 日
  • 筆記

一、開啟apache的Gzip(deflate)功能 gzip可以極大的加速網站,壓縮比率通常在40%~80%之間,在之前的版本中,Gizp是第三方壓縮工具,但是在Gzip 2版本後,Apache自己開發了deflate模組,用來實現壓縮功能。

如果要開啟apache的壓縮功能,需要在編譯安裝apache時,增加「–enable-deflate」配置項,並且必須在主配置文件中打開下面兩個模組:

LoadModule deflate_module modules/mod_deflate.so  LoadModule headers_module modules/mod_headers.so

注意:如果在編譯安裝時,沒有增加「–enable-deflate」選項,可以使用DSO方式安裝此功能,如下:

[root@www ~]# cd /root/httpd-2.4.23/modules/filters/ #切換至apache 源碼包 mod_deflate 所在的目錄下  [root@www ~]#  /usr/local/http-2.4.23/bin/apxs -c -i -a mod_deflate.c #以 dso 的方式編譯安裝到 apache 中

如果報錯如下:

此報錯是缺少zlib-devel的安裝包,直接執行「yum -y install zlib-devl」進行安裝即可,然後再次安裝deflate功能。

確認安裝成功:

[root@www filters]# ll /usr/local/http-2.4.23/modules/mod_deflate.so  #檢查 mod_deflate 是否安裝,成功安裝這裡會顯示出該文件

關於上面執行的命令「/usr/local/http-2.4.23/bin/apxs -c -i -a mod_deflate.c」。

選項解釋如下:

  • -c:表示需要執行編譯操作;
  • -i:表示需要執行安裝操作,以安裝一個或多個動態共享對象到伺服器的modeles目錄中。
  • -a:此選項是自動增加一個LoadModule 行到 httpd.conf 文件中,以啟用此模組,或者,如果此行已經存在,則啟用它。

安裝完成後,默認是啟用了這兩個模組的,但是檢查apache的主配置文件時,可能會報錯,如下:

解決辦法:需要在 LoadModule deflate_modulemodules/mod_deflate.so 配置項的前面載入 zlib.so。剛才yum安裝zlib時,它默認安裝在了/usr/lib64目錄下,所以在apache主配置文件中,在 LoadModule deflate_module modules/mod_deflate.so 這行的上一行添加 LoadFile /usr/lib64/libz.so 即可。

最後確認開啟壓縮功能(apache主配置文件中必須開啟以下三行,這三行不一定在同一位置,但是LoadFile /usr/lib64/libz.so必須在那兩個之前):

LoadFile /usr/lib64/libz.so  LoadModule deflate_module modules/mod_deflate.so  LoadModule headers_module modules/mod_headers.so

至此,壓縮功能就開啟了,接下來配置壓縮的功能。

在apache的主配置文件的末尾寫入以下內容(在添加程式碼前最好先確定以下程式碼是否存在):

<IfModule mod_deflate.c>         <!--deflate模組配置-->  DeflateCompressionLevel 6     <!--壓縮等級範圍0-9,數字越大,壓縮比越高,建議取中,否則會加大CPU的壓力-->  SetOutputFilter DEFLATE     <!--設置輸出過濾器,對輸出啟用壓縮,就像一個開關一樣,告訴apache對傳輸到瀏覽器的內容進行壓縮-->  AddOutputFilterByType DEFLATE text/*  <!--設置對文件是對文本的內容進行壓縮,如text/html  text/css text/plain等-->  AddOutputFilterByType  DEFLATE  application/ms*  application/vnd* application/postscript application/javascript application/x-javascript  <!--對JavaScript文件進行壓縮-->  AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp  <!--對php類型的文件進行壓縮-->  SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary  <!--設置圖片類型不進行壓縮,圖片壓縮後的大小可能超過原來的大小,而且可能會失真,所以不對圖片進行壓縮。註:?號表示不會捕獲()里的內容了-->  SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary  <!--同上,就是設置不對 exe,tgz,gz 等的文件進行壓縮-->  SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary  <!--同上就是設置不對 pdf,avi,mp3 等的文件進行壓縮-->  </IfModule>  <!--以下是設置壓縮資訊的日誌輸出-->  DeflateFilterNote Input input_info      <!--聲明輸入流的 byte 數量-->  DeflateFilterNote Output output_info     <!--聲明輸出流的 byte 數量-->  DeflateFilterNote Ratio ratio_info     <!--聲明壓縮的百分比-->  LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate    <!--聲明日誌格式-->  CustomLog logs/deflate_log.log deflate    <!--指定日誌的存放路徑-->

可根據上面的配置,定義自己需要的壓縮項目,要壓縮的文件類型根據自己所需要的配置即可(註:除了圖片之外,flash 的 swf 文件也是不用啟用 GZip 壓縮的) 去除注釋後的程式碼如下:

<IfModule mod_deflate.c>  DeflateCompressionLevel 6  SetOutputFilter DEFLATE  AddOutputFilterByType DEFLATE text/*  AddOutputFilterByType  DEFLATE  application/ms*  application/vnd* application/postscript application/javascript application/x-javascript  AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp  SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary  SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary  SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary  </IfModule>  DeflateFilterNote Input input_info  DeflateFilterNote Output output_info  DeflateFilterNote Ratio ratio_info  LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate  CustomLog logs/deflate_log.log deflate 

修改完成後,保存退出並且重啟http服務,使用Google瀏覽器訪問(在訪問前按「F12」),即可看到壓縮相關的資訊(最好修改網頁的文件,使其大一些,否則不會啟用壓縮,看不到效果),如下:

查看壓縮資訊產生的日誌:

[root@apache http-2.4.23]# cat logs/deflate_log.log      #查看壓縮日誌  "GET / HTTP/1.1" 74/4545 (1%)    #74表示壓縮後的大小,4545表示壓縮前的大小,末尾的括弧中是壓縮率  "GET / HTTP/1.1" 74/4545 (1%)  "-" -/- (-%)  [root@apache http-2.4.23]# ll htdocs/index.html     #可以查看網頁的大小是否為壓縮前的大小「4545」  -rw-r--r--. 1 root root 4545 10月 12 23:00 htdocs/index.html

二、開啟expires快取功能 expires功能可以較少20%~30%左右的重複請求,讓重複的用戶對指定的頁面請求結果都cache在本地,而無需向伺服器發出請求。但是經常發生更改的文件不建議這麼做。

1、在沒有快取機制的情況下,先查看以下獲取的響應報文。

[root@apache htdocs]# curl -I 127.0.0.1/test.jpg      #訪問一個圖片  HTTP/1.1 200 OK  Date: Sun, 13 Oct 2019 02:10:34 GMT  Server: Apache/2.4.23 (Unix)  Last-Modified: Mon, 22 Jul 2019 05:55:51 GMT  ETag: "415bf-58e3eba7687c0"  Accept-Ranges: bytes  Content-Length: 267711  Content-Type: image/jpeg            #這就是內容的格式,在定義快取機制時的類型就是根據這來定義的  #可以看到,上面沒有出現cache等相關字樣

2、配置expires快取功能:

[root@apache htdocs]# vim /usr/local/http-2.4.23/conf/httpd.conf     #編輯主配置文件                         ..................#省略部分內容  LoadModule expires_module modules/mod_expires.so     #去掉此行注釋符號  #然後在配置文件的末尾添加以下expires規則  <IfModule mod_expires.c>  ExpiresActive On            #開啟快取機制  #以下是定義各種類型的文件快取多長時間  ExpiresByType text/css "now plus 1 month"  ExpiresByType application/x-javascript "now plus 5 day"  ExpiresByType image/jpeg "access plus 30 days"   #這裡將圖片的快取時間設置為30天  ExpiresByType image/gif "access plus 1 month"  ExpiresByType image/bmp "access plus 1 month"  ExpiresByType image/x-icon "access plus 1 month"  ExpiresByType image/png "access plus 1 minute"  ExpiresByType application/x-shockwave-flash "access plus 1 month"  ExpiresDefault "now plus 0 minute"    #這行表示上面沒有定義的,則不進行快取。  </IfModule>  #寫入後,保存退出即可。  [root@apache htdocs]# apachectl -t         #測試配置文件是否有誤  Syntax OK  [root@apache htdocs]# apachectl restart      #重啟apache,以便剛才的更改生效

無注釋的配置文件如下:

LoadModule expires_module modules/mod_expires.so  <IfModule mod_expires.c>  ExpiresActive On  ExpiresByType text/css "now plus 1 month"  ExpiresByType application/x-javascript "now plus 5 day"  ExpiresByType image/jpeg "access plus 30 days"  ExpiresByType image/gif "access plus 1 month"  ExpiresByType image/bmp "access plus 1 month"  ExpiresByType image/x-icon "access plus 1 month"  ExpiresByType image/png "access plus 1 minute"  ExpiresByType application/x-shockwave-flash "access plus 1 month"  ExpiresDefault "now plus 0 minute"  </IfModule>

快取機制的配置格式:ExpiresByType type/encoding "<base> [plus] {<num><type>}"

1、其中<base>是下列之一:

  • access(相對於客戶端訪問的時間)
  • now(相當於access)
  • modification(相對於最後一次修改源文件後的快取時間)

2、該plus關鍵字是可選的。num 應該是整數值,並且type是以下之一:

  • years
  • months
  • weeks
  • days
  • hours
  • minutes
  • seconds

也可以使用以下格式來定義快取機制:

ExpiresByType image/jpeg A2592000   #表示圖片的快取是1個月  ExpiresByType text/html M604800    #表示HTML文檔的有效期是最後修改時刻後的一星期

如果使用「A」(等同於access)「M」(等同於modification)來定義快取有效期,那麼只能以秒來計算。 結論:expires模組可以將到期日期設置為相對於上次修改源文件的時間,還是相對於客戶端訪問的時間。 3、進行訪問測試,查看是否有快取機制:

[root@apache htdocs]# curl -I 127.0.0.1/test.jpg    #訪問某個圖片  HTTP/1.1 200 OK  Date: Sun, 13 Oct 2019 02:16:44 GMT  Server: Apache/2.4.23 (Unix)  Last-Modified: Mon, 22 Jul 2019 05:55:51 GMT  ETag: "415bf-58e3eba7687c0"  Accept-Ranges: bytes  Content-Length: 267711  Cache-Control: max-age=2592000       #這就是快取的時間,單位是秒  Expires: Tue, 12 Nov 2019 02:16:44 GMT  Content-Type: image/jpeg

關於快取的配置格式,可以閱讀其官方文檔進行詳細了解。 三、禁止Apache進行目錄遍歷 當web伺服器收到請求報文時,會自動在網頁根目錄下尋找index.html文件,那麼,如果沒有這個文件呢?

[root@apache htdocs]# ls    #確認web伺服器的網頁根目錄沒有index.html文件  a.sh  images  test.jpg

客戶端就會看到以下介面:

可以看到,如果沒有index.html文件,那麼我們的網頁結構就直接暴露給了client,這樣多少會存在一些隱患,所以,怎麼解決呢?

解決方法如下:

[root@apache htdocs]# vim ../conf/httpd.conf     #編輯主配置文件  Options Indexes FollowSymLinks      #定位到這行  #更改如下:  Options  FollowSymLinks         #將中間的Indexes刪除即可保存退出  [root@apache htdocs]# apachectl restart        #重啟apache以便生效

Indexes 的作用就是當該目錄下沒有 index.html 文件時,就顯示目錄結構。

客戶端再次訪問:

OK!!!看到的是403頁面。 四、隱藏apache的版本資訊

[root@apache htdocs]# curl -I 127.0.0.1    #查看默認apache的狀態資訊  HTTP/1.1 403 Forbidden  Date: Sun, 13 Oct 2019 03:08:39 GMT  'Server: Apache/2.4.23 (Unix) '     #可以看到apache的詳細版本資訊  Content-Type: text/html; charset=iso-8859-1

若想隱藏,須進行以下操作:

[root@apache htdocs]# cd ../conf/  [root@apache conf]# vim httpd.conf     #編輯主配置文件  Include conf/extra/httpd-default.conf       #去掉此行前的注釋符號後保存退出  [root@apache conf]# pwd       #查看當前工作路徑  /usr/local/http-2.4.23/conf  [root@apache conf]# vim extra/httpd-default.conf    #編輯此文件  #找到下面這兩行:  ServerTokens Full  ServerSignature Off  #更改如下:  ServerTokens Prod  ServerSignature On  #更改後保存退出  [root@apache conf]# apachectl restart     #重啟服務,以便更改生效  [root@apache conf]# curl -I 127.0.0.1     #再次訪問查看  HTTP/1.1 403 Forbidden  Date: Sun, 13 Oct 2019 03:19:17 GMT  Server: Apache           #發現只有apache了,而沒有了詳細的版本  Content-Type: text/html; charset=iso-8859-1

如果你需要徹底將版本之類的資訊進行改頭換面,你就需要在編譯之前做準備或者進行重新編譯了。在重新編譯時,修改apache的源碼包下 include 目錄下的 ap_release.h 配置文件

#define AP_SERVER_BASEVENDOR "Apache Software Foundation" #服務的供應商名稱  #define AP_SERVER_BASEPROJECT "Apache HTTP Server" #服務的項目名稱  #define AP_SERVER_BASEPRODUCT "Apache" #服務的產品名  #define AP_SERVER_MAJORVERSION_NUMBER 2 #主要版本號  #define AP_SERVER_MINORVERSION_NUMBER 4 #小版本號  #define AP_SERVER_PATCHLEVEL_NUMBER 23 #修補程式級別  #define AP_SERVER_DEVBUILD_BOOLEAN 0 #

上述列出的行,可以修改成自己想要的,然後編譯安裝之後,客戶端就徹底不知道你的版本號了。 五、apache日誌切割 隨著網站的訪問量越來越大,web server產生的日誌文件也會越來越大,如果不進行分割,必定會有一定程度的不方便。因此,管理好這些海量的日誌對網站的意義是很大的。

日誌分割共兩種方法。

方法1:使用rotatelogs(apache自帶的工具)按天分割日誌,每隔一天記錄一個日誌

[root@apache conf]# vim httpd.conf   #編輯主配置文件  #將以下兩行配置注釋掉(去除默認的日誌記錄)  #ErrorLog "logs/error_log"  #CustomLog "logs/access_log" common  #然後最好在CustomLog "logs/access_log" common配置的下一行添加如下內容(以下內容不可以直接複製,請看下面的解釋):  ErrorLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/error_%Y-%m-%d.log 86400"  CustomLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/access_%Y-%m-%d.log 86400" combined  #添加後,保存退出即可

上面兩行的配置項,必須在<IfModule log_config_module> </IfModule>標籤中寫入。這就是我為什麼說最好寫在CustomLog "logs/access_log" common配置的下一行的原因,因為這行就在該標籤中,寫在它的下一行,錯不了。

在上面添加的內容中,86400為輪轉的時間,單位是秒(也就是一天生成一個日誌文件); 需要注意我這裡的rotatelogs命令的絕對路徑,需根據自己的實際安裝路徑來定,不要直接複製。

[root@apache conf]# apachectl restart    #重啟服務,以便更改生效  [root@apache conf]# ls ../logs/   #查看日誌文件,會發現沒有access的切割日誌  access_log  'error_2019-10-13.log'  error_log  httpd.pid  #此時,原來的access_log和error_log日誌文件已經可以刪除了  #沒有access的切割日誌是因為更改後還沒有訪問過  [root@apache conf]# curl 127.0.0.1 &> /dev/null    #訪問一下  [root@apache conf]# ls ../logs/    #再次查看,就有了  'access_2019-10-13.log  error_2019-10-13.log'  httpd.pid  access_log             error_log

由於 apache 自帶的日誌輪詢工具 rotatelogs,據說在進行日誌切割時容易丟日誌,因此我們通常使用 cronolog (也就是方法2)進行日誌輪詢。 方法2:使用cronolog為每一天建立一個新的日誌 同樣需要注釋掉主配置文件中的下面兩行:

#ErrorLog "logs/error_log"  #CustomLog "logs/access_log" common

cronolog包: https://pan.baidu.com/s/1dg9khnNYUbIA4j31h2VYbA 提取碼: 5jg5

[root@apache src]# rz           #使用xshell上傳我提供的源碼包  #進行編譯安裝  [root@apache src]# tar zxf cronolog-1.6.2.tar.gz  [root@apache src]# cd cronolog-1.6.2/  [root@apache cronolog-1.6.2]# ./configure && make && make install  [root@apache conf]# pwd      #切換工作路徑至此  /usr/local/http-2.4.23/conf  [root@apache conf]# vim httpd.conf     #編輯主配置文件  #將方法1中寫入的日誌切割配置項刪除,寫入下面的兩行配置  ErrorLog "|/usr/local/sbin/cronolog logs/error-%Y-%m-%d.log"  CustomLog "|/usr/local/sbin/cronolog logs/access-%Y-%m-%d.log" combined  #寫完保存退出即可  [root@apache logs]# ls    #為了避免混亂,我移走了原有的日誌文件  httpd.pid  [root@apache logs]# apachectl restart   #重啟  [root@apache logs]# curl 127.0.0.1 &> /dev/null    #訪問一下,以便生成訪問日誌文件  [root@apache logs]# ls     #查看確認,  access-2019-10-13.log  error-2019-10-13.log  httpd.pid

至此,即可實現了每天的日誌文件分開單獨存放。

如果 Apache 中有多個虛擬主機,最好每個虛擬主機中放置一個這樣的程式碼,並將日誌文件名改成不同的名字。 3、附加 如果網站訪問量實在過於龐大,那麼我們可能更需要的是將日誌按小時分割,然後按小時分割的日誌存放在一個目錄中,也就是說,每天對應一個目錄,這個 目錄下存放的是當天產生的按小時分割的日誌。

實現如下:

只需將方法2中寫入的兩行配置項,更改為如下即可:

[root@apache conf]# vim httpd.conf    #更改如下  ErrorLog "|/usr/local/sbin/cronolog logs/error_%Y-%m-%d/error_log.%H"  CustomLog "|/usr/local/sbin/cronolog logs/access_%Y-%m-%d/access_log.%H" combined  [root@apache conf]# apachectl restart    #重啟  [root@apache logs]# curl 127.0.0.1      #訪問一下  [root@apache http-2.4.23]# pwd     #切換工作路徑  /usr/local/http-2.4.23  [root@apache http-2.4.23]# tree logs/      #使用tree命令查看  logs/  |-- access_2019-10-13    #訪問的日誌日期  |   `-- access_log.12         #12點產生的  |-- error_2019-10-13      #錯誤的日誌日期  |   `-- error_log.12          #也是12點產生的  `-- httpd.pid

注意:以上兩個管道日誌文件程式還有一點不同之處是使用 cronolog 時如果日誌是放在某個不存在的路徑則會自動創建目錄,而使用 rotatelogs 時不能自動創建,這一點要特別注意 六、配置防盜鏈 有時候,你的網站莫名其妙的訪問量變大,不要高興的太早,有可能是被別人盜鏈了。 舉個例子:比如你搭了個論壇,裡面有些熱點圖片、影片;然後別人將他網站上訪問圖片的地址重定向到你的 論壇上,這樣他的伺服器就可以空閑出來了;也就是說別人訪問他網站的圖片影片,消耗的卻是你伺服器的資源。 如果解決這個問題,需要藉助apache的rewrite模組,配置如下:

[root@apache conf]# vim httpd.conf      #編輯主配置文件  #確認有以下的配置項,並且去掉注釋,若沒有下面這行,則需安裝rewrite模組  LoadModule rewrite_module modules/mod_rewrite.so

開啟rewrite模組後,找到自己網站對應的配置文件(如主配置文件或虛擬主機配置文件中),在末尾加入以下程式碼:

RewriteEngine On  RewriteCond %{HTTP_REFERER} !^$  RewriteCond %{HTTP_REFERER} !^http://test.com/.*$ [NC]  RewriteCond %{HTTP_REFERER} !^http://test.com$ [NC]  RewriteCond %{HTTP_REFERER} !^http://www.test.com/.*$ [NC]  RewriteCond %{HTTP_REFERER} !^http://www.test.com$ [NC]  RewriteRule .*.(gif|jpg|swf)$ http://www.test.com/about/nolink.png [R,NC,L]

相關選項解釋如下:

  • RewriteEngine On:啟用rewrite,必須寫上;
  • RewriteCond……:在寫RewriteRule之前,可以有一條或多條,用於測試rewrite的匹配條件,具體寫法,後面再聊;
  • .RewriteRule:配置規則;
  • %{HTTP_REFERER}:伺服器變數,http referer是header的一部分,當瀏覽器向web伺服器發送請求的時候,一般會帶上referer,告訴伺服器是我是從哪個頁面鏈接過來的,伺服器就藉此可以獲取一些資訊用於處理,比如從我主頁上鏈接到一個朋友那裡,他的伺服器就可以從http referer中統計出每天有多少用戶點擊我主頁上的鏈接訪問他的網站;
  • [ NC]指的是不區分大小寫,[R]強制重定向 redirect;
  • 字母 L 表示如果能匹配本條規則,那麼本條規則是最後一條(Last),忽略之後的規則;
  • RewriteCond %{HTTP_REFERER} !^$:這行配置項作用是允許空「HTTP_REFERER」的訪問,就是用戶直接在瀏覽器輸入URL訪問該資源,而不是通過鏈接訪問的。
  • RewriteCond %{HTTP_REFERER} !test.com/.$ [NC]和RewriteCond %{HTTP_REFERER} !www.test.com/.$ [NC]是設置允許訪問的HTTP來源,包括網站自身。
  • RewriteRule .*.(gif|jpg|swf)$ http://www.test.com/about/nolink.png [R,NC,L] 的作用是將不滿足referer條件的訪問重定向至nolink.png, nolink.png 位於允許「盜鏈」的目錄 about中,要相當注意,不然,警告資訊和圖片將無法在對方網站上顯示。

注意:測試時注意清除快取。

小結:

1、紅色部分: 表示自己的信任站點。對我的站點來說,設置為 http://www.test.com 和http://test.com 2.、綠色部分: 要保護文件的擴展名(以|分開)。表示以這些為擴展名的文件,必須通過紅色標註的網址引用,才可以訪問。 3、藍色部分: 定義被盜鏈時替代的圖片,讓所有盜鏈 jpg、gif、swf 等文件的網頁,顯示網頁文檔根目錄下的 about/ nolink.png 文件。 注意:替換顯示的圖片不要放在設置防盜鏈的目錄中,並 且該圖片文件體積越小越好。當然你也可以不設置替換圖片,而是使用這條語句即可:RewriteRule .*.(gif|jpg|png)$ – [F] 註:[F] (強制 URL 為被禁止的 forbidden),強制當前 URL 為被禁止的,即,立即回饋一個 HTTP 響應程式碼 403(被禁止的)。

對上述的防盜鏈進行測試: 我這裡有A( www.test.com ) 和B( www.daolian.com ) 兩台伺服器,其中B伺服器的index.html首頁文件如下:

[root@localhost html]# cat index.html     #B 伺服器的首頁文件是個鏈接,指向了A伺服器的test.jpg文件。  <a href="http://www.test.com/test.jpg">link</a>

client直接訪問A伺服器的test.jpg文件時(其URL和B伺服器的超鏈接地址一樣),得到以下美女一枚:

但是如果通過B伺服器的超鏈接來訪問呢?請繼續看下去。

What???怎麼是只二哈,不應該是一枚美女嗎?並且它的URL也不是我們B伺服器指定的超鏈接地址了。

這就是我們A伺服器的防盜鏈配置生效了!!!

利用rewrite實現Apache防盜鏈小結

通過判斷referer變數的值,來判斷圖片或資源的引用是否合法,只有在根據配置符合設定需求範圍內的referer,這樣的網站內容,才能調用訪問指定的資源內容,從而實現了資源被網站盜鏈的目的。需要注意的是:是所有的用戶代理(瀏覽器)都會設置referer變數,而且有的還可以手工修改erferer,referer是可以被偽造的,上面的配置只是一種簡單的防護手段。應付一般的盜鏈足矣。

當網站被盜鏈,一般可以採取以下措施:

  • 對本站的圖片、影片、音頻等文件標上自己的站名品牌或者相關水印;
  • 設置防火牆,從源頭IP進行控制
  • 設置防盜鏈(根據referer機制)

網站被非法盜鏈使用,會導致網站頻寬成本加大以及伺服器壓力加大,嚴重時會導致巨額的網站及正常用戶訪問受到影響。