博文結構
Apache的Gzip(deflate)功能
Apache的緩存設置
Apache禁止目錄遍歷
Apache隱藏版本目錄
Apache日誌分割
Apache配置防盜鏈
關於apache源碼包安裝參考apache安裝及工作模式
一.apache的Gzip(deflate)功能
開啓 apache 的 Gzip(deflate)功能 gzip 可以極大的加速網站,有時壓縮比率高到 80%,最少都有 40%以上,還是相當不錯的。 在 Apache2 之後的版本,模塊名不叫 gzip,而叫 mod_deflate
- 未使用 Gzip
- 開啓使用
- 如果要使用gzip(deflate)的功能,一定要打開兩個模塊
注:進入主配置文件裏面把前面#號去掉就可以
如圖:
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf
LoadModule deflate_module modules/mod_deflate.so
//模塊的作用:對傳輸到客戶端的代碼進行gzip壓縮
LoadModule headers_module modules/mod_headers.so
/模塊的作用:告訴客戶端的瀏覽器,傳輸的文件使用了gzip壓縮。如果不開啓的話,則無法正常顯示網頁內容
- mod_deflate 模塊檢查及安裝
[root@localhost ~]# cd /usr/src/httpd-2.4.23/modules/filters/
//切換到Apache源碼包mod_deflate所在的目錄下
[root@localhost filters]# /usr/local/http-2.4.23/bin/apxs -c -i -a mod_deflate.c
//使用apxs命令進行安裝
- apxs命令參數的解釋:
-i:表示需要執行安裝操作,以安裝一個或多個動態共享對象到服務器的modules目錄中;
-a:表示會自動增加一個 LoadModule 行到 httpd.conf 文件中,以啓用此模塊,或者,如果 此行已經存在,則啓用之;
-c:表示需要執行編譯操作。
- 在安裝時會報錯如圖:
- 這是需要yum安裝zlib-devel
[root@localhost ~]# yum -y install zlib-devel
- 在Apache主配置文件的 LoadModule deflate_module modules/mod_deflate.so 這行的上一行添加
- LoadFile /usr/local/zlib/lib/libz.so
[root@localhost /]# vim /usr/local/http-2.4.23/conf/httpd.conf
[root@localhost /]# apachectl -t
Syntax OK
[root@localhost /]# apachectl restart
-
接下來修改Apache主配置文件,使其開啓gzip壓縮傳輸功能
- 在Apache主配置文件中在末尾添加如下內容:
[root@localhost /]# vim /usr/local/http-2.4.23/conf/httpd.conf
<IfModule mod_deflate.c>
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/*
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ 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
解釋:
<IfModule mod_deflate.c>
DeflateCompressionLevel 9
\\壓縮程度的等級,預設可以採用 6 這個數值,以維持 耗用處理器效能與網頁壓縮質量的平衡
SetOutputFilter DEFLATE
\\設置輸出過濾器,對輸出啓用壓縮,必須的,就像一個 開關一樣,告訴 apache 對傳輸到瀏覽器的內容進行壓縮
AddOutputFilterByType DEFLATE text/*
\\設置對文件是文本的內容進行壓縮,例如 text/html text/css text/plain 等.
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
\\設置不對後綴 gif,jpg,jpeg,png 的圖片文件進行壓縮。注:?:表示不會捕獲 ( )裏內容了
</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
//指定日誌的存放路徑
- 修改完成後保存退出並重啓 httpd 服務,使用瀏覽器測試訪問,如下圖顯示結果:(提示:在訪問測試頁之前按 F12 鍵)
注:訪問之前需要把網頁內容調的大一些,多複製幾行
[root@localhost /]# vim /usr/local/http-2.4.23/htdocs/index.html
[root@localhost /]# apachectl -t
Syntax OK
[root@localhost /]# apachectl restart
- 可以看到頁面已經被壓縮
- 查看日誌
[root@localhost ~]# cat /usr/local/http-2.4.23/logs/deflate_log.log
"GET / HTTP/1.1" 77/5265 (1%)
"GET /favicon.ico HTTP/1.1" -/- (-%)
"GET / HTTP/1.1" 77/5265 (1%)
"GET / HTTP/1.1" 77/5265 (1%)
[root@localhost ~]#
注:圖片是不需要啓用 GZip 壓縮的,從 GZip 檢測結果來看,壓縮後的圖片體積竟然大過原 體積!這就解釋了爲什麼圖片不用啓用 GZip 壓縮的原因了
apache的緩存配置
這個是非常有用的優化,mod_expires 可以減少 20-30%左右的重複請求,讓重複的用戶對指定 的頁面請求結果都 CACHE 在本地,根本不向服務器發出請求。但要注意更新快的文件不要 這麼做。 這個模塊控制服務器應答時的 Expires 頭內容和 Cache-Control 頭的 max-age 指令。有效期 (expiration date)可以設置爲相對於源文件的最後修改時刻或者客戶端的訪問時刻
- 未啓用 mod_expires模塊expire緩存的效果
- 啓用 expire 緩存
進入主配置裏面搜索expires把前面#去掉
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf
- 然後添加 Expires 配置規則 (在Apache主配置文件末尾添加以下內容)
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/html "access plus 2 minute"
ExpiresByType image/jpeg "access plus 1 mouth"
ExpiresDefault "now plus 0 minute"
</IfModule>
註釋:
<IfModule mod_expires.c>
//表示啓用expires模塊
ExpiresActive On
//啓用expires功能
ExpiresByType text/html "access plus 2 minute"
//設置後綴爲html的文本文件保存時間爲兩分鐘
ExpiresByType image/jpeg "access plus 1 mouth"
//設置後綴爲jpeg的圖片信息保存時間爲一個月
ExpiresDefault "now plus 0 minute"
//其他默認沒有被定義的不進行緩存
</IfModule>
- 測試效果如下:
其中<base>是下列之一:
• access
• now (等價於'access ')
• modification
plus 關鍵字是可選的。<num>必須是整數,<type>是下列之一:
• years
• months
• weeks
• days
• hours
• minutes
• seconds
- Apache禁止目錄遍歷
將 Options Indexes FollowSymLinks 中的 Indexes 去掉,就可以禁止 Apache 顯示該目錄結構
Indexes 的作用就是當該目錄下沒有 index.html 文件時,就顯示目錄結構。
[root@localhost ~]# cd /usr/local/http-2.4.23/htdocs/
[root@localhost htdocs]# mv index.html /index.html.bak
[root@localhost htdocs]# mkdir aaa
[root@localhost htdocs]# mkdir 123
[root@localhost htdocs]# vim /usr/local/http-2.4.23/conf/httpd.conf
[root@localhost htdocs]# apachectl restar
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf
[root@localhost ~]# apachectl restart
報403沒有權限訪問
顯示目錄結構:把主配置文件裏面剛刪除的寫回來
報200訪問成功
apache隱藏版本
- 默認 apache 的狀態信息
- 這樣輕易的出現在互聯網上,顯然是不安全的。可以通過以下操作進行優化處理,方法如下:
[root@localhost /]# vim /usr/local/http-2.4.23/conf/httpd.conf
進入主配置文件把前面#號去掉
- 修改 httpd-default.conf
[root@localhost /]# vim /usr/local/http-2.4.23/conf/extra/httpd-default.conf
找到 ServerTokens Full ServerSignature On 改成 ServerTokens Prod ServerSignatureoff 重啓 apache 測試
[root@localhost /]# apachectl restart
[root@localhost /]# curl -I 127.0.0.1
-
可以看到apache版本號被隱藏了
- 如果你需要徹底將版本之類的信息進行改頭換面,你就需要在編譯之前做準備或者進行從新 編譯了。在重新編譯時,修改源碼包下 include 目錄下的 ap_release.文件
#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 #