Apache深度優化

博文大綱:
Apache深度優化

  • 一、開啓apache的Gzip(deflate)功能
  • 二、開啓expires緩存功能
  • 三、禁止Apache進行目錄遍歷
  • 四、隱藏apache的版本信息
  • 五、apache日誌切割
  • 六、配置防盜鏈

一、開啓Apache的Gzip(deflate)功能

gzip 可以極大的加速網站, 有時壓縮比率高到 80%,最少都有 40%以上, 還是相當不錯的。
在 Apache2 之後的版本, 模塊名不叫 gzip,而叫 mod_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 中

如果報錯:

Apache深度優化
原因是缺少 zlib-devel 的安裝包,裝上就可以了。

[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配置文件時出現錯誤:
Apache深度優化
解決方法:
需要在LoadModuledeflate_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

在 httpd.conf 中加入以下代碼,可以加到任何空白地方,不瞭解 apache 的話,如果擔心加錯地方,就放到 http.conf 文件的最後一行。
注:在添加代碼前最好先查一查要添加的代碼是否存在

<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 

修改完成後保存退出並重啓 httpd 服務
使用谷歌瀏覽器測試訪問,如下圖顯示結果:(提示:在訪問測試頁之前按 F12 鍵)

Apache深度優化

查看壓縮信息產生的日誌:

[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

客戶端就會看到以下界面:
Apache深度優化

可以看到,如果沒有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 文件時,就顯示目錄結構。

客戶端再次訪問:
Apache深度優化

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 日誌切割

爲什麼要分割日誌:
隨着網站的訪問越來越大, WebServer 產生的日誌文件也會越來越大,如果不對日誌進行分割,那麼只能一次將大的日誌(如 Apache 的日誌)整個刪除,這樣也丟失了很多對網站比較寶貴的信息,因爲這些日誌可以用來進行訪問分析、網絡安全監察、網絡運行狀況監控等,因此管理好這些海量的日誌對網站的意義是很大的。

方法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/1LBFHHUKWT13VeAjzs36GoA

[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 時不能自動創建,這一點要特別注意

六、 配置防盜鏈

有時候,你的網站莫名其妙的訪問量變大,不要高興的太早,有可能是被別人盜鏈了。
舉個例子:比如你搭了個 discuz 論壇,裏面有些熱點圖片、 視頻;然後別人將他網站上訪問圖片的地址重定向到你的 discuz 上,這樣他的服務器就可以空閒出來了;也就是說別人訪問他網站的圖片視頻,消耗的確是你服務器的資源;
解決這個問題的方法是配置下防盜鏈,讓外來的盜不了鏈;
方法 1: Apache 防盜鏈的第一種實現方法,可以用 rewrite 實現。

首先要確認 Apache 的 rewrite module 可用:
[root@www ~]# apachectl -M | grep rewrite 
rewrite_module (shared)
打開 httpd.conf,確保有這麼一行配置:
LoadModule rewrite_module modules/mod_rewrite.so
然後在找到自己網站對應的配置的地方(如在主配置文件中或虛擬主機中),加入下列代碼:
ServerName www.benet.com
#防盜鏈配置
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://benet.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://benet.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.benet.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.benet.com$ [NC]
RewriteRule .*\.(gif|jpg|swf)$http://www.benet.com/about/nolink.png[R,NC,L]
注:相關選項的解釋
1.RewriteEngine On #啓用 rewrite, 要想 rewrite 起作用,必須要寫上
2.RewriteCond test-string condPattern #寫在 RewriteRule 之前,可以有一或 N 條,用於測試
rewrite 的匹配條件,具體怎麼寫,後面會詳細說到。
3.RewriteRule Pattern Substitution #規則
4. %{HTTP_REFERER}:服務器變量, HTTPReferer 是 header 的一部分,當瀏覽器向 web
服務器發送請求的時候,一般會帶上 Referer,告訴服務器我是從哪個頁面鏈接過來的,服
務器藉此可以獲得一些信息用於處理。比如從我主頁上鍊接到一個朋友那裏,他的服務器就
能夠從 HTTP Referer 中統計出每天有多少用戶點擊我主頁上的鏈接訪問他的網站。
5.[ NC]指的是不區分大小寫,[R]強制重定向 redirect
6. 字母 L 表示如果能匹配本條規則,那麼本條規則是最後一條(Last),忽略之後的規則

注意:測試時注意清除緩存。
小結:
Apache深度優化

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(被禁止的)。

方法 2: 通過判斷瀏覽器頭信息來阻止某些請求, 即利用 SetEnvIfNoCase 和 access。
這個方法可以通過阻止某些機器人或蜘蛛爬蟲抓取你的網站來節省你的帶寬流量。

語法: SetEnvIfNoCase attribute regex [!]env-variable[=value] [[!]env-variable[=value]] ...
#SetEnvIfNoCase 當滿足某個條件時,爲變量賦值, 即根據客戶端請求屬性設置環境變量。

注: Referer :指明瞭請求當前資源原始資源的 URL,使用referer 是可以防盜鏈
然後在找到自己網站對應的配置的地方(如在主配置文件中或虛擬主機中),加入下列代碼:

SetEnvIfNoCase Referer "^$" local_ref
SetEnvIfNoCase Referer"^http://www.benet.com/.*$" local_ref
SetEnvIfNoCase Referer"^http://benet.com/.*$"local_ref
<filesmatch"\.(mp3|mp4|zip|rar|jpg|gif|png)">
# 2.4 版本以下的
方法一:
Order Deny,Allow
Allow from env=local_ref
Deny from all
方法二:
Order Allow,Deny
Allow from env=local_ref
#2.4 版本以上,方法如下:
Require all denied
Require env local_ref
</filesmatch>

———————— 本文至此結束,感謝閱讀

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章