Apache調優(一)


 (1).Apache和Tomcat的關系

  Apache HTTPD Server與Apache Tomcat同屬於Apache的開源項目。兩個都可以單獨作為web server使用,但是又都有各自的特性。Apache HTTPD一般也就簡稱為Apache

  Apache是比較老的用來支撐靜態web項目的server。 而Tomcat主要是用來支撐動態web項目的,與數據庫交互的系統。當然,Tomcat也可以用來開發靜態web系統,只是性能上比着Httpd差些。Apache當然也可以支持動態web,因為從Apache的modules下,我們可以看到大量的modules以“mod_*.so”的命名。這些modules擴展了Apache的功能,從而可以讓它能服務於采用PHP、CGI等server端開發語言,但是不能解釋java程序(jsp,serverlet)。不過可以與Tomcat連通(單向Apache連接Tomcat,就是說通過Apache可以訪問Tomcat資源。反之不然)

  Tomcat本身就是典型的Java Servlet引擎。它被用來作為Java Servlet的容器,管理Servlet的生命周期,從來處理動態頁面請求等操作。我們可以認為Tomcat是apache的擴展。

  兩者都是一種容器,只不過發布的東西不同。apache是html容器,功能像IIS一樣,tomcat是jsp/servlet容器,用於發布JSP及JAVA的,類似的有IBM的webshere、EBA的Weblogic,sun的JRun等

  apache和tomcat是獨立的,在通一台服務器上可以集成。打個比方:apache是一輛卡車,上面可以裝一些東西如html等。但是不能裝水,要裝水必須要有容器(桶),tomcat就是一個桶(裝像JAVA這樣的水),而這個桶也可以不放在卡車上。

(2).隱藏Apache版本信息

  隱藏版本號可以有效避免黑客根據Apache版本信息,查找對應漏洞進行攻擊。

  使用curl -I [IP地址或域名]查看響應頭,就可以看到Server的版本,如下查看了百度、淘寶、騰訊的Server版本,它們都做了版本隱藏。

[root@youxi1 ~]# curl -I www.baidu.com| grep Server
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0   277    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
Server: bfe/1.0.8.18
[root@youxi1 ~]# curl -I www.taobao.com | grep Server
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0   278    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
Server: Tengine
[root@youxi1 ~]# curl -I www.tencent.com | grep Server
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0   189    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
Server: NWS_UGC_HY

  下載Apache源碼包(https://mirrors.aliyun.com/apache/httpd/)、apr源碼包和apr-util源碼包(http://mirror.bit.edu.cn/apache//apr/)並上傳,在源碼編譯之前,修改相應配置文件

[root@youxi1 ~]# tar zxf httpd-2.4.39.tar.gz -C /usr/local/src/
[root@youxi1 ~]# cd /usr/local/src/httpd-2.4.39/
[root@youxi1 httpd-2.4.39]# vim include/ap_release.h  //修改第40~47行
#define AP_SERVER_BASEVENDOR "IIS"  //服務供應商名稱,原為Apache Software Foundation
#define AP_SERVER_BASEPROJECT "IIS HTTP Server"  //服務項目名稱,原為Apache HTTP Server
#define AP_SERVER_BASEPRODUCT "IIS"  //服務的產品名稱,原為Apache

#define AP_SERVER_MAJORVERSION_NUMBER 7  //主要版本號,原為2
#define AP_SERVER_MINORVERSION_NUMBER 0  //小版本號,原為4
#define AP_SERVER_PATCHLEVEL_NUMBER   0  //補丁級別,原為39
#define AP_SERVER_DEVBUILD_BOOLEAN    0

  然后安裝依賴包,編譯安裝apr、apr-util和apache。注意:Apache2.4.7及以上版本需要apr1.5.0或以上版本。

 

//安裝依賴包
[root@youxi1 httpd-2.4.39]# yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel gcc expat-devel
[root@youxi1 httpd-2.4.39]# cd ~
[root@youxi1 ~]# tar zxf apr-1.6.5.tar.gz -C /usr/local/src/
[root@youxi1 ~]# tar zxf apr-util-1.6.1.tar.gz -C /usr/local/src/
//編譯安裝apr
[root@youxi1 ~]# cd /usr/local/src/apr-1.6.2/
[root@youxi1 apr-1.6.2]# ./configure --prefix=/usr/local/apr
[root@youxi1 apr-1.6.2]# make && make install
[root@youxi1 apr-1.6.2]# echo $?
0
//編譯安裝apr-util
[root@youxi1 apr-1.6.5]# cd ../apr-util-1.6.1/
[root@youxi1 apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config
[root@youxi1 apr-util-1.6.1]# make && make install
[root@youxi1 apr-util-1.6.1]# echo $?
0
//--enable-so支持動態加載模塊,--enable-rewrite支持網站地址重寫,--enable-ssl支持ssl加密,--enable-deflate支持頁面傳輸前進行壓縮,--enable-expires支持設置網頁緩存的時間
[root@youxi1 apr-util-1.6.1]# cd ../httpd-2.4.39/
[root@youxi1 httpd-2.4.39]# ./configure --prefix=/usr/local/apache2.4.39 --enable-so --enable-rewrite --enable-ssl --enable-deflate --enable-expires
 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
[root@youxi1 httpd-2.4.39]# make && make install
[root@youxi1 httpd-2.4.39]# echo $?
0

 

  生成啟動腳本,啟動並查看。

[root@youxi1 httpd-2.4.39]# cp /usr/local/apache2.4.39/bin/apachectl /etc/init.d/httpd 
[root@youxi1 httpd-2.4.39]# /etc/init.d/httpd
[root@youxi1 httpd-2.4.39]# curl -I 192.168.5.101
HTTP/1.1 200 OK
Date: Mon, 05 Aug 2019 06:56:57 GMT
Server: IIS/7.0.0 (Unix)  //可以看到這里顯示的是IIS/7.0.0
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: "2d-432a5e4a73a80"
Accept-Ranges: bytes
Content-Length: 45
Content-Type: text/html

  注意:此時是無法使用chkconfig設置開機自啟的,因為缺少了關鍵的兩行。如下設置后,才可以設置開機自啟

[root@youxi1 httpd-2.4.39]# cd /usr/local/apache2.4.39/
[root@youxi1 apache2.4.39]# vim /etc/init.d/httpd
#!/bin/sh  //在這一行下面添加,也就是第一行下面
# chkconfig: 2345 64 36  //在系統的哪些模式下啟動、開機順序、關閉順序
# description: apache  //描述
[root@youxi1 apache2.4.39]# chkconfig --add httpd  //添加到chkconfig管理
[root@youxi1 apache2.4.39]# chkconfig --list httpd
httpd           0:關    1:關    2:開    3:開    4:開    5:開    6:關

  還可以接着隱藏系統類型和模塊版本號

[root@youxi1 apache2.4.39]# vim conf/httpd.conf
Include conf/extra/httpd-default.conf  //第490行,將該行啟用
[root@youxi1 apache2.4.39]# vim conf/extra/httpd-default.conf
ServerTokens Prod  //第55行,不顯示服務器操作系統類型
ServerSignature Off  //第65行,不顯示web服務器版本號和模塊版號。apache2.4之前需要修改。

  重新加載配置,並查看結果

[root@youxi1 apache2.4.39]# /etc/init.d/httpd graceful  //restart也可以,不過會斷開連接
[root@youxi1 apache2.4.39]# curl -I 192.168.5.101
HTTP/1.1 200 OK
Date: Mon, 05 Aug 2019 07:40:41 GMT
Server: IIS  //可以看到服務器類型和Web服務器版本號都沒有了
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: "2d-432a5e4a73a80"
Accept-Ranges: bytes
Content-Length: 45
Content-Type: text/html

(3).修改運行apache的默認用戶

  查看當前運行apache的用戶

[root@youxi1 apache2.4.39]# ps aux | grep httpd
root       1399  0.0  0.2  74924  2960 ?        Ss   14:56   0:00 /usr/local/apache2.4.39/bin/httpd
daemon     1702  0.0  0.4 429424  4724 ?        Sl   15:40   0:00 /usr/local/apache2.4.39/bin/httpd
daemon     1703  0.0  0.4 363888  4204 ?        Sl   15:40   0:00 /usr/local/apache2.4.39/bin/httpd
daemon     1704  0.0  0.4 363888  4204 ?        Sl   15:40   0:00 /usr/local/apache2.4.39/bin/httpd
root       1789  0.0  0.0 112724   996 pts/0    R+   15:49   0:00 grep --color=auto httpd

  修改運行apache的默認用戶

[root@youxi1 apache2.4.39]# useradd -M -s /sbin/nologin apache
[root@youxi1 apache2.4.39]# vim conf/httpd.conf
User apache  //第167~168行
Group apache

  重啟Apache,並查看

[root@youxi1 apache2.4.39]# /etc/init.d/httpd graceful        
[root@youxi1 apache2.4.39]# ps aux | grep httpd               
root       1399  0.0  0.2  74924  2968 ?        Ss   14:56   0:00 /usr/local/apache2.4.39/bin/httpd
apache     1816  0.0  0.4 363888  4204 ?        Sl   15:58   0:00 /usr/local/apache2.4.39/bin/httpd
apache     1817  0.0  0.4 363888  4204 ?        Sl   15:58   0:00 /usr/local/apache2.4.39/bin/httpd
apache     1818  0.0  0.4 363888  4204 ?        Sl   15:58   0:00 /usr/local/apache2.4.39/bin/httpd
root       1901  0.0  0.0 112724   996 pts/0    R+   15:58   0:00 grep --color=auto httpd

(4).修改Apache目錄及其下文件權限

  htdocs是Apache存放網頁的主目錄,修改其所屬主和所屬組

[root@youxi1 apache2.4.39]# chown apache:apache htdocs/ -R
[root@youxi1 apache2.4.39]# ll -sd htdocs/
0 drwxr-xr-x 2 apache apache 24 8月   5 14:23 htdocs/

(5).保證Apache日志文件權限為root

  由於Apache日志的記錄是由Apache的主進程進行操作的,而Apache的主進程又是root用戶啟動的,所以這樣不影響日志的輸出。這也是日志記錄的最安全的方法。

[root@youxi1 apache2.4.39]# ll logs/
總用量 12
-rw-r--r-- 1 root root  142 8月   5 15:40 access_log
-rw-r--r-- 1 root root 1142 8月   5 15:58 error_log
-rw-r--r-- 1 root root    5 8月   5 15:58 httpd.pid
[root@youxi1 apache2.4.39]# ll -ds logs/
0 drwxr-xr-x 2 root root 58 8月   5 14:56 logs/

(6).使用cronlog切割Apache日志

  apache服務器,默認日志文件是不分割的,一個整文件既不易於管理,也不易於分析統計。cronolog 是一個簡單的過濾程序,讀取日志文件條目從標准輸入和輸出的每個條目並寫入指定的日志文件的文件名模板和當前的日期和時間。當擴展文件名的變化,目前的文件是關閉,新開辟的。 cronolog 旨在和一個Web服務器一起使用,如Apache,分割訪問日志為每天或每月的日志。

  安裝cronlog

[root@youxi1 apache2.4.39]# yum -y install epel-release
[root@youxi1 apache2.4.39]# yum -y install cronolog

  配置Apache使用cronlog

[root@youxi1 apache2.4.39]# vim conf/httpd.conf
//第274行
ErrorLog "|/usr/sbin/cronolog /usr/local/apache2.4.39/logs/error_%Y%m%d.log"
//第303行
    CustomLog "|/usr/sbin/cronolog /usr/local/apache2.4.39/logs/access_%Y%m%d.log" combined
[root@youxi1 apache2.4.39]# /etc/init.d/httpd graceful
[root@youxi1 apache2.4.39]# ls logs/  //這時候會立即生成error日志文件
access_log  error_20190806.log  error_log  httpd.pid
[root@youxi1 apache2.4.39]# curl -I 192.168.5.101
HTTP/1.1 200 OK
Date: Tue, 06 Aug 2019 02:07:23 GMT
Server: IIS
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: "2d-432a5e4a73a80"
Accept-Ranges: bytes
Content-Length: 45
Content-Type: text/html

[root@youxi1 apache2.4.39]# ls logs/  //訪問一次后會生成access日志文件
access_20190806.log  access_log  error_20190806.log  error_log  httpd.pid

(7).錯誤頁面

  為了提升網站的用戶體驗,避免404,403之類的丑陋的默認錯誤提示出現。我們需要對錯誤頁面進行優化,讓他們變的漂亮一點。錯誤頁面不僅在於告訴用戶訪問出現了問題,而且需要引導用戶到正確的頁面。

  方法一:指定到自定義界面

[root@youxi1 apache2.4.39]# vim conf/httpd.conf
<Directory "/usr/local/apache2.4.39/htdocs">  //在該行下添加一行,該行為第223行
    ErrorDocument 404 /404.html
[root@youxi1 apache2.4.39]# echo "This is 404.html" > htdocs/404.html  //創建一個測試404頁面
[root@youxi1 apache2.4.39]# /etc/init.d/httpd graceful  //重新加載

  Windows測試

  方法二:跳轉到指定網頁

[root@youxi1 apache2.4.39]# vim conf/httpd.conf
<Directory "/usr/local/apache2.4.39/htdocs">
    ErrorDocument 404 http://www.baidu.com  //還是相同的位置,只是路徑改為了外網域名地址
[root@youxi1 apache2.4.39]# /etc/init.d/httpd graceful  //重新加載

  Windows測試,可以看到直接跳轉到百度了

(8).啟用壓縮模塊

  網站隨着用戶訪問量的增加和內容量的增加,網站的帶寬會不斷的增加,隨之就是網站成本的增加。並且當內容量增大的時候,客戶端如果帶寬小,就會影響用戶的體驗。因此從這兩方面考慮,網站的某些內容必須經過壓縮之后再傳給用戶,然后在用戶客戶端進行解壓,來實現雙方共贏的效果。

  Apache的壓縮要用到mod_deflate模塊,該模塊提供了DEFLATE輸出過濾器,允許服務器在將輸出內容發送到客戶端之前進行壓縮,以節約帶寬。它的核心思想就是把文件先在服務器進行壓縮,然后再進行傳輸,這樣可以顯著減少文件傳輸的大小。當傳輸完畢后,客戶端游覽器會重新對壓縮過的內容進行解壓縮。如果沒特殊情況的話,所有的文本內容都應該能被gzip壓縮,例如:html(php),js,css,xml,txt等。特殊情況就是像一些首頁上有很多廣告投放的js代碼,由於需要每次加載進而進行來訪信息統計,所以這些廣告代碼擁有者網站的js不會經過gzip壓縮。

  另外需要注意,壓縮模塊雖然減少了帶寬的消耗,但增加了CPU的消耗。

  使用命令查看是否安裝了deflate模塊,如果返回deflate_module(static)則是編譯安裝時一起安裝的,如果返回deflate_module(shared)則是DSO方式安裝的。

[root@youxi1 apache2.4.39]# /usr/local/apache2.4.39/bin/apachectl -M | grep deflate
[root@youxi1 ~]# ls /usr/local/apache2.4.39/modules/mod_deflate.so
/usr/local/apache2.4.39/modules/mod_deflate.so  //說明存在但沒有啟用

  注意:編譯時安裝方法,在編譯時跟上--enable-deflate即可;DSO方式可以在編譯服務器之后編譯,也可以在安裝完成后使用Apache主目錄下的bin/apxs擴展工具編譯並增加。

  使用apxs擴展工具安裝deflate模塊

[root@youxi1 apache2.4.39]# ls /usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.*
/usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.c
/usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.dep
/usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.dsp
/usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.exp
/usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.la
/usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.lo
/usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.mak
/usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.o
/usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.slo
//-c選項表明需要執行編譯操作;-i選項表明需要執行安裝操作,以安裝一個或多個動態共享對象到服務器的modules目錄;
//-a選項表明增加一個LoadModule行到httpd.conf文件中,以激活此模塊,或者如果此行存在則啟用。
[root@youxi1 apache2.4.39]# bin/apxs -cia /usr/local/src/httpd-2.4.39/modules/filters/mod_deflate.c
[root@youxi1 apache2.4.39]# echo $?
0
[root@youxi1 apache2.4.39]# ls modules/mod_deflate.so
modules/mod_deflate.so  //查看是否存在deflate模塊
[root@youxi1 apache2.4.39]# vim conf/httpd.conf
LoadFile /usr/lib64/libz.so  //添加
LoadModule deflate_module modules/mod_deflate.so  //在該行上方添加一行,該行為第106行
[root@youxi1 apache2.4.39]# bin/apachectl -M | grep deflate
deflate_module (shared)  //顯示這個就是安裝成功了

  接着配置deflate模塊參數

[root@youxi1 apache2.4.39]# vim conf/httpd.conf
//在第158行之后添加,也就是LoadModule這一大段結束后添加
<Ifmodule mod_deflate.c>
   DeflateCompressionLevel 9  //壓縮等級,數值1~9,9為最高,壓縮程度越高,CPU消耗越大,一般使用6或8
   SetOutputFilter DEFLATE  //啟用壓縮
   DeflateFilterNote Input instream  //聲明輸入流
   DeflateFilterNote Output outstream  //聲明輸出流
   DeflateFilterNote Ratio ratio  //聲明壓縮百分比
   AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript  //聲明壓縮類型
</Ifmodule>
[root@youxi1 apache2.4.39]# /etc/init.d/httpd graceful  //重新加載
[root@youxi1 apache2.4.39]# cp conf/httpd.conf htdocs/httpd.html  //生成一個測試頁面
[root@youxi1 apache2.4.39]# ll -h htdocs/httpd.html  //查看測試頁面大小
-rw-r--r-- 1 root root 19K 8月   6 15:47 htdocs/httpd.html 

  這時候使用360瀏覽器安裝YSLOW插件,先登錄測試網頁(極速模式),再打開YSLOW插件的Components選項,可以看到原大小19.1K,壓縮后的大小6.3K。

  注意:生產環境中,在啟用mod_deflate時,對於太小的文件和某些格式的圖片不要對它們進行壓縮,有可能越壓越大。

  所有可以壓縮的文件類型:text/plain、text/html、text/php、text/xml、text/css、text/javascript、application/xhtml+xml、application/xml、application/rss+xml、application/atom_xml、application/x-javascript、application/x-httpd-php、image/svg+xml、image/gif、image/png、image/jpe、image/swf、image/jpeg、image/bmp。

(9).啟用網頁緩存模塊

  通過mod_deflate模塊啟用了壓縮,從很大程度上節約了企業帶寬,降低了企業成本。可是由於現在越來越多的圖片、腳本、css和flash被嵌入到頁面中,當客戶訪問站點勢必會做很多次的http請求,因此我們還可以通過mod_expires緩存模塊來設置ExpiresHeader來緩存這些文件。

  Expires是通過header報文來指定特定類型的文件在游覽器中的緩存時間的。平時,我們大多數的圖片,flash在發布之后都是不需要經常修改的,因此做了緩存之后,游覽器第一次從服務器下載之后,就不需要再從服務器下載這些文件而是直接從游覽器緩存中讀取了。這樣客戶訪問頁面的速度就會大大加快,企業的帶寬壓力也得到了緩解。

  使用命令查看是否安裝了expires模塊,如果返回expires_module(static)則是編譯安裝時一起安裝的,如果返回expires_module(shared)則是DSO方式安裝的。

[root@youxi1 apache2.4.39]# bin/apachectl -M | grep expires

  注意:編譯時安裝方法,在編譯時跟上--enable-expires即可;DSO方式可以在編譯服務器之后編譯,也可以在安裝完成后使用Apache主目錄下的bin/apxs擴展工具編譯並增加。

  使用apxs擴展工具安裝deflate模塊

[root@youxi1 apache2.4.39]# ls /usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.*
/usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.c
/usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.dep
/usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.dsp
/usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.exp
/usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.la
/usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.lo
/usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.mak
/usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.o
/usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.slo
//-c選項表明需要執行編譯操作;-i選項表明需要執行安裝操作,以安裝一個或多個動態共享對象到服務器的modules目錄;
//-a選項表明增加一個LoadModule行到httpd.conf文件中,以激活此模塊,或者如果此行存在則啟用。
[root@youxi1 apache2.4.39]# bin/apxs -cia /usr/local/src/httpd-2.4.39/modules/metadata/mod_expires.c
[root@youxi1 apache2.4.39]# echo $?
0
[root@youxi1 apache2.4.39]# ls /usr/local/apache2.4.39/modules/mod_expires.so
/usr/local/apache2.4.39/modules/mod_expires.so  //查看是否存在expires模塊
[root@youxi1 apache2.4.39]# bin/apachectl -M | grep expires
 expires_module (shared)  //顯示這個表示安裝成功

  接着配置expires模塊參數

[root@youxi1 apache2.4.39]# vim conf/httpd.conf
//如果想要全局啟用expires模塊參數,一樣可以在LoadModule大段結束后添加(第158行左右)
//如果只想某個目錄配置,可以將expires模塊參數加入到對應目錄的<Directory></Directory>標簽內
//甚至可以針對虛擬主機配置,將expires模塊參數加入到對應虛擬主機的<VirtualHost></VirtualHost>標簽內
<IfModule mod_expires.c>
    ExpiresActive on
    ExpiresDefault "access plus 12 month"
    ExpiresByType text/html "access plus 12 months"
    ExpiresByType text/css "access plus 12 months"
    ExpiresByType image/gif "access plus 12 months"
    ExpiresByType image/jpeg "access plus  12 months"
    ExpiresByType image/jpg "access plus 12 months"
    ExpiresByType image/png "access plus 12 months"
    EXpiresByType application/x-shockwave-flash "access plus 12 months"
    EXpiresByType application/x-javascript "access plus 12 months"
    ExpiresByType video/x-flv "access plus 12 months"
</IfModule>
[root@youxi1 apache2.4.39]# /etc/init.d/httpd graceful  //重新加載

參數說明:

  ExpiresDefault "<base> [plus] {<number> <type>}"

  ExpiresByType "<base> [plus] {<number> <type>}"

  <base>的參數有3個:access,now(等價於‘access’),modification(最后修改日期)

  plus(加上)關鍵字是可選的。

  <num>必須是整數,確保可以atoi()所接收。(atoi可以把字符串轉換成長整型數)

  <type>參數類型:years,months,weeks,days,hours,minutes,seconds

注意:如果你使用基於最后修改日期的設置,“Expires”頭將不會被添加到那些並非來自於硬盤文件的內容,這是因為這些內容並不存在“最后修改時間”的屬性。基准時刻可以是源文件的最后修改時刻或者客戶端對源文件的訪問時刻,至於使用那一個則由<code>指定。“M”表示源文件的最后修改時刻,“A”表示客戶端對源文件的訪問時刻,需要注意的是<code>和seconds之間沒有空格。這兩個基准的差別是很微妙的。如果使用“M”,所有當前緩存中的文檔副本都將在同一時刻過期,這個可能對定期更新的URL(比如位於同一位置的每周通告)很有好處。如果使用“A”,則每個客戶端所得到的有效期是不一樣的,這個可能對那些幾乎不更新的圖片很有好處,特別是對於一組都引用相同圖片的相關文檔。

  再次使用360瀏覽器打開測試頁面,然后打開YSLOW,可以看到出現緩存時間了,時間到2020年7月31日。

  緩存的優點:1.縮短服務的響應時間;2.減輕服務器負擔;3.減少網絡帶寬使用量,降低企業成本。

  緩存的缺點:由於使用了緩存設置,導致被緩存的內容更新了,但是客戶看到的卻還是舊的。針對此缺點可以縮短緩存時間(例如1天)或對緩存的對象改名。

(10).啟用長鏈接

  打開長鏈接后,會保持連接,減少三次握手,但是會消耗內存。是否打開,取決於單位時間內是否進行多次連接(三次握手),一個連接有多次請求的,建議打開,並適當調整KeepAliveTimeout時間。

  在Apache的httpd.conf中,KeepAlive指的是保持連接活躍,如果將KeepAlive設置為On,那么來自同一客戶端的請求就不需要再一次連接,避免每次請求都要新建一個連接而加重服務器的負擔。當然KeepAlive的連接活躍時間受KeepAliveTimeOut限制的。如果第二次請求和第一次請求之間超過KeepAliveTimeOut的時間的話,第一次連接就會中斷,再新建第二個連接。

  所以,一般情況下,圖片較多的網站應該把KeepAlive設為On。但是KeepAliveTimeOut應該設置為多少秒就是一個值得討論的問題了。如果KeepAliveTimeOut設置的時間過短,例如設置為1秒,那么APACHE就會頻繁的建立新連接,當然會耗費不少的資源;反過來,如果KeepAliveTimeOut設置的時間過長,例如設置為300秒,那么APACHE中肯定有很多無用的連接會占用服務器的資源,也不是一件好事。所以,到底要把KeepAliveTimeOut設置為多少,要看網站的流量、服務器的配置而定。

  修改長鏈接配置

[root@youxi1 apache2.4.39]# vim conf/httpd.conf
Include conf/extra/httpd-default.conf  //啟用這一行,搜索一下吧,大概在第500行左右
[root@youxi1 apache2.4.39]# vim conf/extra/httpd-default.conf
Timeout 60  //第10行,接收一個GET的請求時間;POST或PUT請求時接收兩個TCP包之間的時間;應答TCP包傳輸中兩個ACK包之間的時間。默認10
KeepAlive On  //第16行,默認是開啟的
MaxKeepAliveRequests 100  //第23行,一個長鏈接的最大請求數,超過將會斷開重新連接,默認100
KeepAliveTimeout 30  //第29行,修改下超時時間,單位秒,默認5秒

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM