Apache深度優化

博文結構
Apache的Gzip(deflate)功能
Apache的緩存設置
Apache禁止目錄遍歷
Apache隱藏版本目錄
Apache日誌分割
Apache配置防盜鏈

關於apache源碼包安裝參考apache安裝及工作模式

一.apache的Gzip(deflate)功能

開啓 apache 的 Gzip(deflate)功能 gzip 可以極大的加速網站,有時壓縮比率高到 80%,最少都有 40%以上,還是相當不錯的。 在 Apache2 之後的版本,模塊名不叫 gzip,而叫 mod_deflate

  • 未使用 Gzip

Apache深度優化

  • 開啓使用

Apache深度優化

  • 如果要使用gzip(deflate)的功能,一定要打開兩個模塊
    注:進入主配置文件裏面把前面#號去掉就可以
    如圖:
    [root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf
    Apache深度優化
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:表示需要執行編譯操作。
  • 在安裝時會報錯如圖:

Apache深度優化

  • 這是需要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
Apache深度優化
[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
Apache深度優化

[root@localhost /]# apachectl -t
Syntax OK
[root@localhost /]# apachectl restart
  • 可以看到頁面已經被壓縮

Apache深度優化

  • 查看日誌
[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緩存的效果

Apache深度優化

  • 啓用 expire 緩存

進入主配置裏面搜索expires把前面#去掉

[root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf

Apache深度優化

  • 然後添加 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>
  • 測試效果如下:

Apache深度優化

其中<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

Apache深度優化

Apache深度優化

報403沒有權限訪問

顯示目錄結構:把主配置文件裏面剛刪除的寫回來

Apache深度優化

報200訪問成功

apache隱藏版本

  • 默認 apache 的狀態信息

Apache深度優化

  • 這樣輕易的出現在互聯網上,顯然是不安全的。可以通過以下操作進行優化處理,方法如下:

[root@localhost /]# vim /usr/local/http-2.4.23/conf/httpd.conf
進入主配置文件把前面#號去掉

Apache深度優化

  • 修改 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 測試

Apache深度優化

[root@localhost /]# apachectl restart
[root@localhost /]# curl -I 127.0.0.1

  • 可以看到apache版本號被隱藏了
    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  # 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章