apache调优

一、 隐藏apache的版本信息
1、 屏蔽apache版本等敏感信息
优点:因为黑客可以扫描出apache的版本信息,然后查看对应版本的漏铜,进行攻击。

2、 如何查看apache的版本信息
例1:查看百度的版本信息
[root@xuegod120 ~]# curl -I www.baidu.com
HTTP/1.1 200 OK
Connection: Keep-Alive
Server: bfe/1.0.8.18 #可以看到是被隐藏了

例2:查看淘宝的版本信息
[root@xuegod120 ~]# curl -I www.taobao.com
HTTP/1.1 301 Moved Permanently
Server: Tengine #tengine是淘宝基于nginx进行二次开发的,但是版本信息还是隐藏的
Date: Sat, 03 Aug 2019 00:50:57 GMT
Content-Type: text/html

二、 源码编译安装apache
1、 安装apache的依赖包
[root@xuegod120 ~]# yum install apr-util apr-util-devel apr apr-devel pcre pcre-devel zlib zlib-developenssl openssl-devel gcc -y

2、 上传apache的源码包到服务器
[root@xuegod120 ~]# ls
anaconda-ks.cfg httpd-2.4.37.tar.gz

3、 解压缩后修改源码文件
要彻底将版本之类的信息进行改头换面,需要在编译之前修改源码包下include/ap_release.h文件
[root@xuegod120 ~]# tar xf httpd-2.4.37.tar.gz
[root@xuegod120 ~]# cd httpd-2.4.37/
[root@xuegod120 httpd-2.4.37]# vim include/ap_release.h
改:
40 #define AP_SERVER_BASEVENDOR “Apache Software Foundation”
41 #define AP_SERVER_BASEPROJECT “Apache HTTP Server”
42 #define AP_SERVER_BASEPRODUCT “Apache”

44 #define AP_SERVER_MAJORVERSION_NUMBER 2
45 #define AP_SERVER_MINORVERSION_NUMBER 4
46 #define AP_SERVER_PATCHLEVEL_NUMBER 37
47 #define AP_SERVER_DEVBUILD_BOOLEAN 0
为:
#define AP_SERVER_BASEVENDOR “xuegod”
#define AP_SERVER_BASEPROJECT " Web Server"
#define AP_SERVER_BASEPRODUCT " XWS"

#define AP_SERVER_MAJORVERSION_NUMBER 8
#define AP_SERVER_MINORVERSION_NUMBER 1
#define AP_SERVER_PATCHLEVEL_NUMBER 2
#define AP_SERVER_DEVBUILD_BOOLEAN 3

注释:
#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 6 #补丁级别
#define AP_SERVER_DEVBUILD_BOOLEAN 0 #
注:上述列出的行,大家可以修改成自己想要的,然后编译安装之后,再对httpd-default.conf文件进行修改,对方就彻底不知道你的版本号了。

4、 源码编译安装apache
[root@xuegod120 httpd-2.4.37]# ./configure --prefix=/usr/local/apache2.4-xuegod --enable-so --enable-rewrite --enable-ssl --enable-deflate --enable-expires

配置参数用途:
–prefix=/usr/local/apache2.4 #指定安装路径
–enable-so #支持动态加载模块
–enable-rewrite #支持网站地址重写
–enable-ssl #支持ssl加密,比如: https 443
–enable-deflate #支持页面传输前进行压缩
–enable-expires #支持设置网页缓存的时间

[root@xuegod120 httpd-2.4.37]# make && make install

5、 生成启动脚本
第一种:软连接方式
[root@xuegod63 httpd-2.4.37]# ln -s /usr/local/apache2.4-xuegod/bin/apachectl /usr/sbin/apachectl

第二种:绝对路径方式
[root@xuegod120 httpd-2.4.37]# cp /usr/local/apache2.4-xuegod/bin/apachectl /etc/init.d/apachectl-xuegod

6、 启动apache服务
报错:
[root@xuegod120 httpd-2.4.37]# apachectl start
AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using xuegod120.com. Set the ‘ServerName’ directive globally to suppress this message

解决方法:修改http.conf文件里面的ServerNname即可
[root@xuegod120 ~]# vim /usr/local/apache2.4-xuegod/conf/httpd.conf
ServerName localhost #取消注释,修改为localhost本机
[root@xuegod120 ~]# apachectl start
httpd (pid 22057) already running
[root@xuegod120 ~]# netstat -antup | grep 80
tcp6 0 0 :::80 ::? LISTEN 22057/httpd

7、 查看apache的版本
[root@xuegod120 httpd-2.4.37]# apachectl -V
Server version: XWS/4.8.74 (Unix) #已经隐藏了版本号
Server built: Aug 3 2019 09:02:03
Server’s Module Magic Number: 20120211:83
Server loaded: APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2

[root@xuegod120 ~]# curl -I localhost
HTTP/1.1 200 OK
Date: Sat, 03 Aug 2019 01:08:29 GMT
Server: XWS/4.8.74 (Unix)
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT

三、apache调优
1、 再次隐藏系统类型和模块的版本号
[root@xuegod120 ~]# vim /usr/local/apache2.4-xuegod/conf/httpd.conf
改:489 #Include conf/extra/httpd-default.conf
为:489 Include conf/extra/httpd-default.conf

[root@xuegod120 ~]# vim /usr/local/apache2.4-xuegod/conf/extra/httpd-default.conf
改:
55 ServerTokens Full
65 ServerSignature On
为:
ServerTokens Prod #不显示服务器操作系统类型
ServerSignature Off #不显示web服务器版本号和模块版本。现在默认值就是off了,不用修改。在apache2.4之前的版本,默认值是On,需要改成Off的

2、 重载apache配置文件
[root@xuegod120 ~]# apachectl graceful

3、 再次查看apache版本号
[root@xuegod120 ~]# curl -I localhost
HTTP/1.1 200 OK
Date: Sat, 03 Aug 2019 01:12:07 GMT
Server: XWS #版本号和操作系统已经隐藏

4、 设置apache开机启动
[root@xuegod120 ~]# vim /usr/sbin/apachectl
#!/bin/sh
#chkconfig: 2345 64 36 #在2345级别启动。64开机顺序、36关机顺序
#description: apache
[root@xuegod120 ~]# cp /usr/local/apache2.4-xuegod/bin/apachectl /etc/init.d/apachectl
[root@xuegod120 ~]# chkconfig --add apachectl #设置开机启动,必须要将脚本复制到系统启动读取的目录,这样才能设置开机启动
[root@xuegod120 ~]# chkconfig --list | grep apachectl
apachectl 0:off 1:off 2:on 3:on 4:on 5:on 6:off

5、 修改apache的默认启动用户
[root@xuegod120 ~]# useradd -M -s /sbin/nologin apache
[root@xuegod120 ~]# vim /usr/local/apache2.4-xuegod/conf/httpd.conf
改:165 User daemon
166 Group daemon
为:
165 User apache
166 Group apache

6、 重载apache配置文件
[root@xuegod120 ~]# apachectl graceful

7、 查看运行用户
[root@xuegod120 ~]# ps -aux | grep apachectl
[root@xuegod120 ~]# ps -aux | grep http
root 22057 0.0 0.1 103700 3316 ? Ss 09:05 0:00 /usr/local/apache2.4-xuegod/bin/httpd -k start
apache 35410 0.0 0.2 390528 4400 ? Sl 09:20 0:00 /usr/local/apache2.4-xuegod/bin/httpd -k start
apache 35411 0.0 0.2 390528 4400 ? Sl 09:20 0:00 /usr/local/apache2.4-xuegod/bin/httpd -k start
apache 35412 0.0 0.2 390528 4400 ? Sl 09:20 0:00 /usr/local/apache2.4-xuegod/bin/httpd -k start

8、 设置apache的目录及文件权限
[root@xuegod120 ~]# ll -sd /usr/local/apache2.4-xuegod/htdocs/
0 drwxr-xr-x 2 root root 24 Aug 3 09:03 /usr/local/apache2.4-xuegod/htdocs/
[root@xuegod120 ~]# chown apache.apache -R /usr/local/apache2.4-xuegod/htdocs/ [root@xuegod120 ~]# ll -sd /usr/local/apache2.4-xuegod/htdocs/
0 drwxr-xr-x 2 apache apache 24 Aug 3 09:03 /usr/local/apache2.4-xuegod/htdocs/

9、 保护apache日志、设置好apache日志文件权限
对日志的授权,我们要将属主和属组都设置为root:
[root@xuegod120 ~]# ll -sd /usr/local/apache2.4-xuegod/logs/
0 drwxr-xr-x 2 root root 58 10月 8 17:05 /usr/local/apache2.4-xuegod/logs/

[root@xuegod120 ~]# ll /usr/local/apache2.4-xuegod/logs/
总用量 12
-rw-r–r-- 1 root root 441 10月 8 17:07 access_log
-rw-r–r-- 1 root root 2029 10月 8 17:15 error_log
-rw-r–r-- 1 root root 5 10月 8 17:15 httpd.pid
注:由于Apache日志的记录是由Apache的主进程进行操作的,而Apache的主进程又是root用户启动的,所以这样不影响日志的输出。这也是日志记录的最安全的方法。

10、 使用cronolog分割日志
apache服务器,默认日志文件是不分割的,一个整文件既不易于管理,也不易于分析统计。本文主要讲解Web服务器日志切割工具cronolog。cronolog 是一个简单的过滤程序,读取日志文件条目从标准输入和输出的每个条目并写入指定的日志文件的文件名模板和当前的日期和时间。 当扩展文件名的变化,目前的文件是关闭,新开辟的。 cronolog 旨在和一个Web服务器一起使用,如Apache,分割访问日志为每天或每月的日志

10.1 安装cronolog
[root@xuegod120 ~]# yum -y install epel-release
[root@xuegod120 ~]# yum -y install cronolog

10.2 配置apache使用cronolog
[root@xuegod120 ~]# vim /usr/local/apache2.4-xuegod/conf/httpd.conf
将配置文件中的CustomLog和ErrorLog替换
改:302 CustomLog “logs/access_log” common
为:
302 CustomLog “|/usr/sbin/cronolog /usr/local/apache2.4-xuegod/logs/access_%Y%m%d.log” combined

改:273 ErrorLog “logs/error_log”
为:273 ErrorLog “|/usr/sbin/cronolog /usr/local/apache2.4-xuegod/logs/error_%Y%m%d.log”

更多日志格式参考:
按天轮询(生产环境常见用法,推荐使用):
CustomLog “|/usr/local/sbin/cronolog /app/logs/access_www_%Y%m%d.log” combined
按小时轮询(生产环境较常见用法):
CustomLog “|/usr/local/sbin/cronolog /app/logs /access_www_ %Y%m%d%H.log” combined
10.3 重载apache配置文件
[root@xuegod120 ~]# apachectl graceful

10.4 查看日志
[root@xuegod120 ~]# ll /usr/local/apache2.4-xuegod/logs/*
-rw-r–r-- 1 root root 297 Aug 3 09:36 /usr/local/apache2.4-xuegod/logs/access_20190803.log
-rw-r–r-- 1 apache apache 122 Aug 3 09:12 /usr/local/apache2.4-xuegod/logs/access_log
-rw-r–r-- 1 apache apache 1302 Aug 3 09:36 /usr/local/apache2.4-xuegod/logs/error_log

三、 设置错误页面、开启压缩和缓存功能
1、 错误页面优雅显示
为了提升网站的用户体验,避免404,403之类的丑陋的默认错误提示出现。我们需要对错误页面进行优化,让他们变的漂亮一点。错误页面不仅在于告诉用户访问出现了问题,而且需要引导用户到正确的页面。
错误页面优雅化显示的实现方式主要有两种,下面我们主要以404错误为例:

第一种:修改配置文件
[root@xuegod120 ~]# vim /usr/local/apache2.4-xuegod/conf/httpd.conf
222 <Directory “/usr/local/apache2.4-xuegod/htdocs”> #在这行下面添加如下内容:
223 ErrorDocument 404 /404.html
注:#将404错误跳转到/usr/local/apache2.4-xuegod/htdocs下的404.html页面上。

手动编写错误跳转页面
[root@xuegod120 ~]# echo “404 go to home” > /usr/local/apache2.4-xuegod/htdocs/404.html

重载配置文件
[root@xuegod120 ~]# apachectl graceful

测试
在这里插入图片描述

注意:
如果重启Apache以后在地址栏里故意输入了一个不存在的页面,发现IE并没有打开如上所设置的404页面,这种情况并不是如上所设置没起作。,而是IE里设置里有一个选项“显示友好的HTTP错误信息”,一般默认是选中的,这样错误文件要大于512个字节才会被显示。但是打开Apache的日志文件access_log,可以看到404错误的响应只有15个字节,因此IE没有显示,解决的方法就是关掉IE的这个选项,或者重写一个大一点的错误页面。
在这里插入图片描述

第二种:将404的错误,直接跳转到别的http连接
[root@xuegod120 ~]# vim /usr/local/apache2.4-xuegod/conf/httpd.conf
改: 222 ErrorDocument 404 /404.html
为: ErrorDocument 404 http://www.baidu.com
#将404错误跳转到http://www.baidu.com页面上

重载配置文件
[root@xuegod120 ~]# apachectl graceful

测试
在这里插入图片描述
注:这里设置的跳转,如果是文件,那么apache的网站目录下必须有这个文件才可以,不然会报错。
另外跳转还可以设置为图片类型,注意如果是图片类型,那么网站根目录下必须要有这个图片。

2、 启动压缩模块 mod_deflate
随着用户访问量的增加和内容量的增加,网站的带宽会不断的增加,随之就是网站成本的增加。并且当内容量增大的时候,客户端如果带宽小,就会影响用户的体验。因此从这两方面考虑,网站的某些内容必须经过压缩之后再传给用户,然后在用户客户端进行解压,来实现双方共赢的效果。

ache的压缩要用到mod_deflate模块,该模块提供了DEFLATE输出过滤器,允许服务器在将输出内容发送到客户端以前进行压缩,以节约带宽。它的核心思想就是把文件先在服务器进行压缩,然后再进行传输,这样可以显著减少文件传输的大小。当传输完毕后,客户端游览器会重新对压缩过的内容进行解压缩。如果没特殊情况的话,所有的文本内容都应该能被gzip压缩,例如:html(php),js,css,xml,txt等。特殊情况就是像一些首页上有很多广告投放的js代码,由于需要每次加载进而进行来访信息统计,所以这些广告代码拥有者网站的js不会经过gzip压缩

2.1 mod_deflate模块
查看是否安装了压缩模块
[root@xuegod120 ~]# /usr/local/apache2.4-xuegod/bin/apachectl -M | grep deflate
没有输出显示,说明没有安装压缩模块,如果有安装,则会有如下提示:
deflate_module (shared) #说明模块已安装

2.2 安装mod_deflate模块
第一种:编译时进行安装,即再次编译
编译的时候跟上–enable-deflate即可实现安装

第二种:DSO方式安装
扩展:DSO: Dynamic shared object动态共享对象 。DSO模块可以在编译服务器之后编译,也可以用Apache扩展工具(apxs)编译并增加
使用DSO方式安装,/usr/local/apache2.4-xuegod/bin/apxs后跟的参数详解
-c 此选项表明需要执行编译操作。
-i 此选项表示需要执行安装操作,以安装一个或多个动态共享对象到服务器的modules目录。
-a 此选项自动增加一个LoadModule行到httpd.conf文件中,以激活此模块,或者,如果此行已经存在,则启用之。

DSO方式安装压缩模块
[root@xuegod120 ~]# /usr/local/apache2.4-xuegod/bin/apxs -c -i -a /root/httpd-2.4.37/modules/filters/mod_deflate.c

再次查看是否安装
错误提示
[root@xuegod120 ~]# apachectl -M | grep deflate
httpd: Syntax error on line 105 of /usr/local/apache2.4-xuegod/conf/httpd.conf: Cannot load modules/mod_deflate.so into server: /usr/local/apache2.4-xuegod/modules/mod_deflate.so: undefined symbol: inflate

解决方式:
[root@xuegod120 ~]# vim /usr/local/apache2.4-xuegod/conf/httpd.conf
在: 105 LoadModule deflate_module modules/mod_deflate.so 上面一行,插入以下内容:
LoadFile /usr/lib64/libz.so

再次查看
在这里插入图片描述

3、 压缩模块配置
3.1 确认压错模块是开启
[root@xuegod120 ~]# vim /usr/local/apache2.4-xuegod/conf/httpd.conf
在这里插入图片描述

3.2 配置压缩模块参数

[root@xuegod120 ~]# vim  /usr/local/apache2.4-xuegod/conf/httpd.conf  #在以下内容后,插入:
170 </IfModule>  之后添加以下内容:
<Ifmodule mod_deflate.c>
   DeflateCompressionLevel 9   
   SetOutputFilter DEFLATE  
   DeflateFilterNote Input instream 
   DeflateFilterNote Output outstream 
   DeflateFilterNote Ratio ratio  
   AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript   
</Ifmodule>

在这里插入图片描述
注释:

<ifmodule mod_deflate.c>
   DeflateCompressionLevel 9  #压缩等级,越大效率越高,消耗CPU也越高。
DeflateCompressionLevel 9是指压缩程度的等级,从1到9,9是最高等级。据了解,这样做最高可以减少8成大小的传输量(看档案内容而定),最少也能够节省一半。
DeflateCompressionLevel 预设可以采用 6 这个数值,以维持耗用处理器效能与网页压缩质量的平衡。
注:一般压缩等级使用6或8
   SetOutputFilter DEFLATE   #启用压缩
   DeflateFilterNote Input instream #声明输入流的byte数量
   DeflateFilterNote Output outstream  #声明输出流的byte数量
   DeflateFilterNote Ratio ratio   #声明压缩的百分比
 #LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate      #声明日志类型
   #CustomLog logs/deflate_log.log deflate    #声明日志类型
   AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript  #仅压缩,限制特定的MIME类型文件
</ifmodule>

注:
1)如果是虚拟主机,需要在<VirtualHost*:80>中添加配置即可实现压缩
2)片和视频本身就是压缩格式,一般不需要压缩的。有些小图片和视频压缩后还会变大。

3.3 重载apache配置文件
[root@xuegod120 ~]# apachectl graceful

3.4 创建测试压缩文件
[root@xuegod120 ~]# cp /etc/passwd /usr/local/apache2.4-xuegod/htdocs/passwd.html

3.5 测试压缩比例
使用yslow工具,在360、火狐、谷歌浏览器都可以安装
查看passwd.html文件的大小
[root@xuegod120 ~]# ll -h //usr/local/apache2.4-xuegod/htdocs/passwd.html
-rw-r–r-- 1 root root 36K Aug 3 15:53 //usr/local/apache2.4-xuegod/htdocs/passwd.html

使用360浏览器方法测试是否压缩
36K的数据,压缩后变成0.6K
在这里插入图片描述
总结:我们在企业生产环境中时,在启用mod_deflate时,一定要注意,对于太小的文件和某些格式的图片不要对它们进行压缩,有可能越压越大。
扩展:AddOutputFilterByTypeDEFLATE后跟的所有的压缩文件类型,后期可以参照选择。
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

4、 设置网页缓存时间
我们上面通过mod_deflate模块启用了压缩,从很大程度上节约了企业带宽,降低了企业成本。可是由于现在越来越多的图片、脚本、css和flash被嵌入到页面中,当客户访问站点势必会做很多次的http请求,因此我们还可以通过mod_expires缓存模块来设置ExpiresHeader来缓存这些文件。
pires是通过header报文来指定特定类型的文件在游览器中的缓存时间的。平时,我们大多数的图片,flash在发布之后都是不需要经常修改的,因此做了缓存之后,游览器第一次从服务器下载之后,就不需要再从服务器下载这些文件而是直接从游览器缓存中读取了。这样客户访问页面的速度就会大大加快,企业的带宽压力也得到了缓解。

4.1 检查mod_expires模块是否安装
[root@xuegod120 ~]# apachectl -M | grep expires
没有输出说明没有安装,如果安装,会有如下输出
expires_module (static) #此种结果为编译安装时装的
expires_module (shared) #此种结果为DSO方式安装的

4.2 安装缓存模块
a)编译方式安装
编译的时候跟上–enable-expires即可实现安装
b)DSO方式安装
[root@xuegod120 ~]# /usr/local/apache2.4-xuegod/bin/apxs -c -i -a /root/httpd-2.4.37/modules/metadata/mod_expires.c
[root@xuegod120 ~]# ll /usr/local/apache2.4-xuegod/modules/mod_expires.so
-rwxr-xr-x 1 root root 18360 Aug 3 16:03 /usr/local/apache2.4-xuegod/modules/mod_expires.so #说明安装成功

4.3 查看是否启动缓存模块
在这里插入图片描述

4.4 配置缓存参数
针对全局,直接在主配置文件http.conf中加入如下参数即可
[root@xuegod120 ~]# vim /usr/local/apache2.4-xuegod/conf/httpd.conf

在170 </IfModule> 下面插入以下内容:
<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>

针对目录在httpd.conf文件的<Directory></Directory>标签内,最后加入如下参数即可

245 <Directory "/usr/local/apache2.4-xuegod/htdocs">   
    <IfModule mod_expires.c>  
    resActive 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>
</Directory>

针对虚拟机主机在httpd.conf中添加如下参数即可
[root@xuegod120# vim /usr/local/apache2.4-xuegod/conf/httpd.conf

<VirtualHost *:80>
    ServerAdmin 888@qq.com
    DocumentRoot "/www/html"
    ServerName www.sunsky.pw
    ServerAlias sunsky.pw
CustomLog "|/usr/local/sbin/cronolog /app/logs/www_access_%Y%m%d.log" combined
ErrorLog "|/usr/local/sbin/cronolog /app/logs/www_error_%Y%m%d.log"
<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>
</VirtualHost>

以上三种配置任何一种配置之后,对Apache服务器进行优化重启,然后用火狐或者google游览器的

4.5 重新加载配置文件
[root@xuegod120 ~]# apachectl graceful

4.6 查看缓存
2019年8月3号—2020年7月28号 ###的缓存时间
在这里插入图片描述

4.7 expires模块的扩展用法

expires模块用到了ExpiresDefault和EXpiresByType两个指令,下面是这两个指令的语法。
ExpiresDefault “<base> [plus] {<num><type>}*”
EXpiresByType type/encoding "<base> [plus] {<num><type>}"
其中<base>的参数有3个:access,now(等价于‘access’),modification
modification   [ˌmɒdɪfɪˈkeɪʃn]  改性,修正
plus关键字是可选的。 
plus [plʌs]  加上
<num>必须是整数,确保可以atoi()所接收。(atoi可以把字符串转换成长整型数)
<type>参数类型:years,months,weeks,days,hours,minutes,seconds

例如:下面3个指令都表示文档默认的有效期是一个月
ExpiresDefault “access plus 1 month”
ExpiresDefault “access plus 4 weeks”
ExpiresDefault “access plus 30 days”
有效期可以通过增加“<num><type>”子句进一步调整
ExpiresByType text/html “access plus 1 month 15 days 2 hours”
ExpiresByType image/gif “modification plus 5 hours 3 minutes”

注意:如果你使用基于最后修改日期的设置,“Expires”头将不会被添加到那些并非来自于硬盘文件的内容,这是因为这些内容并不存在“最后修改时间”的属性。
基准时刻可以是源文件的最后修改时刻或者客户端对源文件的访问时刻,至于使用那一个则由指定。“M”表示源文件的最后修改时刻,“A”表示客户端对源文件的访问时刻,需要注意的是和seconds之间没有空格。
这两个基准的差别是很微妙的。如果使用“M”,所有当前缓存中的文档副本都将在同一时刻过期,这个可能对定期更新的URL(比如位于同一位置的每周通告)很有好处。如果使用“A”,则每个客户端所得到的有效期是不一样的,这个可能对那些几乎不更新的图片很有好处,特别是对于一组都引用相同图片的相关文档。

虽然缓存的设置有如下优点
1.缩短服务的响应时间
2.减轻服务器负担
3.减少网络带宽使用量,降低企业成本
但是他的缺点也是显而易见的,由于使用了缓存设置,导致被缓存的内容更新了,但是客户看到的却还是旧的。
如何解决被缓存文件及时更新这个问题呢?
第一种:缩短缓存时间例如:1天,不彻底牺牲性能
第二种:对缓存的对象改名。

四、 开启长连接功能
1、 keepalive和keepalivetimeout说明
KeepAlive Off/On 保持连接,会减少三次握手,但是会消耗内存,是否打开,取决于单位时间内是否进行多次连接(三次握手),一个连接有多次请求的,建议打开,并适当调整KeepAliveTimeout时间

在APACHE的httpd.conf中,KeepAlive指的是保持连接活跃,如果将KeepAlive设置为On,那么来自同一客户端的请求就不需要再一次连接,避免每次请求都要新建一个连接而加重服务器的负担。

KeepAlive的连接活跃时间当然是受KeepAliveTimeOut限制的。如果第二次请求和第一次请求之间超过KeepAliveTimeOut的时间的话,第一次连接就会中断,再新建第二个连接。

所以,一般情况下,图片较多的网站应该把KeepAlive设为On。但是KeepAliveTimeOut应该设置为多少秒就是一个值得讨论的问题了。

如果KeepAliveTimeOut设置的时间过短,例如设置为1秒,那么APACHE就会频繁的建立新连接,当然会耗费不少的资源;反过来,如果KeepAliveTimeOut设置的时间过长,例如设置为300秒,那么APACHE中肯定有很多无用的连接会占用服务器的资源,也不是一件好事。

所以,到底要把KeepAliveTimeOut设置为多少,要看网站的流量、服务器的配置而定。

2、 开启keepalive长连接功能
如下设置的参数值,仅供参考,实际设置多少,根据情况而定
[root@xuegod120 ~]# vim /usr/local/apache2.4-xuegod/conf/httpd.conf
改: 511 #Include conf/extra/httpd-default.conf
为:511 Include conf/extra/httpd-default.conf #这一步,一般情况,需要修改,因为前面我们已经开启了这个选项

[root@xuegod120 htdocs]# vim /usr/local/apache2.4-xuegod/conf/extra/httpd-default.conf
修改:
改:16 KeepAlive Off
为:16 KeepAlive On #如果已经为On,开启长链接功能。那么就不需要再开启了
改:29 KeepAliveTimeout 5
为:29 KeepAliveTimeout 30
注:考虑到我的网站上有不少的图片,所以将KeepAlive设为On,一般的页面两次请求间隔不会超过30秒,所以这样设置,至尽运行状况良好。如果是艺术品网站, 需要看的时间长,那么就设置长一些。

23 MaxKeepAliveRequests 100
默认:100
一个建立好的Keep-Alive连接,允许发送的请求的个数。一旦建立连接,要么就是个数达到了断开,要么就是等KeepAliveTimeout时间到了断开连接。

MaxKeepAliveRequests指令限制了当启用KeepAlive时,每个连接允许的请求数量。如果将此值设为"0",将不限制请求的数目。我们建议最好将此值设为一个比较大的值,以确保最优的服务器性能。"

这个数字的设置,必须考虑在一个时间段内,同一个用户访问你的服务会发多少请求。要结合KeepAliveTimeout参数来考虑。

举个例子,用户需要间隔时间不大于KeepAliveTimeout的时间内,连续请求10个文件,那么这个参数就应该设置成10,如果用户在连续时间里不断请求访问,则这个数值得设置得更多。否则就重新建立连接下载。一旦用户连续进行了10个请求后,并且这个用户肯定在完成这些请求后的5秒内不会再请求,甚至要在之后的很长时间后请求,那么这个KeepAliveTimeout时间就可以设置得很短,以便尽早断开这种用户,把资源让个其他用户。

3、 案例分析
假设 KeepAlive 的超时时间为 10 秒钟,服务器每秒处理 50 个独立用户访问,那么系统中Apache的总进程数就是 10 * 50 = 500 个,如果一个进程占用 4M 内存,那么总共会消耗2G内存,所以可以看出,在这种配置中,相当消耗内存,但好处是系统只处理了 50次 TCP 的握手和关闭操作。
如果关闭 KeepAlive,如果还是每秒50个用户访问,如果用户每秒的并发请求数为3个,那么 Apache 的总进程数就是 50 * 3 = 150 个,如果还是每个进程占用 4M 内存,那么总的内存消耗为600M,这种配置能节省大量内存,但是,系统处理了 150 次 TCP 的握手和关闭的操作,因此又会多消耗一些 CPU 资源。
注:1、如果内存和CPU都足够,开启和关闭KeepAlive对性能影响不大。2、如果考虑服务器压力,如果同一个客户端对服务器会经常访问,建议开启KeepAlive。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值