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秒

  

posted @ 2019-08-06 17:50  苦逼运维  阅读(1630)  评论(0编辑  收藏  举报