1、为什么要优化apache
在用户访问比较大时,apache工作效率会变低,在不提升硬件配置的情况下,优化apahce服务,能够缓解或增加访问量。提升web站点的安全性,提升数据流量等。
2、9种常用的优化方式
1.保持连接:保持客户端和web服务器之间的会话连接,减少三次握手和四次挥手的次数。
2.网页压缩:web服务器传输数据时,对数据进行压缩,节省流量。
3.网页缓存时间:调整网页缓存时间的长短
4.隐藏apache版本号:防止黑客通过版本号找到漏洞。
5.防盗链:防止其他网站盗链本站点的图片或视频,减少CPU运算量。
6.ab压力测试:测试服务器和apache服务的访问量,并发量等
7.apache日志分析:查看apache的日志,分析访问状态,统计访问数据。
8.apache日志分割:多个日志文件同时记录日志信息,大并发量访问时的日志写入。
9.apache工作模式:调整工作模式,完成不同并发量的处理。
保持会话
客户端在访问过程中,会发送链接请求(三次握手)和断开请求(四次挥手),而且是每个页面访问会发送一次。大量的链接请求占用网络带宽和服务器的CPU运算。
配置选项:
在httpd.conf文件中添加选项:
keepalive ON|OFF 是否打开保持连接功能。根据网站的并发请求量决定是否打开,高并发时打开,并发量不高时可选择关闭。
keepalive timeout 一次TCP连接多次HTTP请求之间的最大间隔时间,两次HTTP请求超过此时间连接将会断开。默认5秒
MaxKeepAliveRequests 一次TCP连接能够传输的最大HTTP请求数量。默认100
vim /etc/httpd/conf/httpd.conf
# 添加:
keepalive on
keepalivetimeout 60
maxkeepaliverequests 300
网页压缩
对web服务器发送的数据使用gzip格式进行压缩后,传输给浏览器,能够加快网页加载的速度,节省带宽,有利于搜索引擎抓取。但是会占用一定的CPU运算量。
Apache支持的压缩模块:
mod_gzip: 类似gzip算法,压缩速度略慢,压缩比例高,CPU占用略高,适用于访问量比较低的服务器。
mod_deflate:类似gzip算法,压缩速度略快,压缩比例低,CPU占用低,适用于访问量比较高的服务器。
DEFLATE是同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法。
安装开源apache时,输入配置选项 --enable-deflate 启用压缩算法。(启用deflate模块,注意必须安装依赖包“zlib-devel”) deflate:缩小
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript 对什么格式的内容启用压缩
DeflateCompressionLevel 9 压缩级别为9,范围是1-9,数字大压缩率高
SetOutputFilter DEFLATE 启用deflate压缩方式
vim /etc/httpd/conf/httpd.conf
# 添加:
AddoutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript
DeflateCompressionLevel 9
SetOutputFilter deflate
apache页面缓存时间
1.客户端能够对网页内容进行缓存的集中情况:
1)服务器允许客户端进行页面缓存
2)服务器站点是静态页面
3)动态网站只能缓存结构,不能缓存数据库中的数据。
4)图片,视频,flash等可以缓存,但不能缓存人机对话的内容(游戏类)。
2.缓存的作用:
1)能够加快客户端访问重复页面内容的速度,如刷新页面或返回主页,后退等操作。
2)节省服务器的数据处理量和数据传输量。
3.配置选项:
vim /etc/httpd/conf/httpd.conf
# 添加:
<IfModule mod_expires.c>
ExpiresActive On ##启用页面缓存时间
ExpiresDefault "access plus 60 seconds" ##设置默认缓存1分钟
</IfModule>
4.源代码安装的apache需要在安装前配置模块
--enable-expires
启用缓网页缓存过期时间模块(expires:到期,终止,有效期)
启用mod_expires模块后,会自动生成页面头部信息中的Expires标签和CacheControl标签,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的。
隐藏apache的版本号
作用:防止黑客通过查询版本号,检测到响应的漏洞进行攻击。
1.rpm安装的apache修改方式:
vim /etc/httpd/conf/httpd.conf
# 添加:
ServerTokens Prod ##显示最少的信息,默认是Full显示完整信息 tokens:象征 prod:元素积 signature:签名,部署
ServerSignature Off ##生成页面的页脚
2.源代码安装的apache修改方式:
vim /usr/local/httpd/conf/httpd.conf
# 添加:
ServerTokens Prod ##显示最少的信息,默认是Full显示完整信息
ServerSignature Off ##生成页面的页脚
书上的方法:
方法二:如果是编译安装的 apache,我们可以做以下操作
进入 Apache的源码目录下的include目录,编辑 ap_release.h这个文件如下变量,然后重新编译安装即可
#detine 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 2
#define AP_SERVER_PATCHLEVEL_NUMBER 15
#define AP_SERVER_DEVBUILD_BOOLEAN 0
可以根据自己喜好,修改或隐藏版本号与名字。
防盗链
作用:本地网站上传的图片被其他网站盗用,在大量用户访问的情况下,本地网站的CPU运算量会大幅度提升。防盗链是为了禁止其他网站链接图片。
超链接:点击超链接后,页面会转到指定的位置。
盗链:在页面中显示其他指定页面的内容,由其他服务器进行运算。
配置选项:
RewriteEngine ON #打开网页重写功能
RewriteCond #设置匹配规则
RewriteRule #设置跳转动作
rewrite 的规则:%{HTTP_REFERER} 浏览header中的链接字段,存放一个连接的URL,代表是从哪个链接访问所需的网页。
!^ 不以某个字段开头
.*$ 以任意字符结尾
NC 不区分大小写
R强制跳转
规则匹配:如果相应变量的值匹配所设置的规则,则逐条往下处理。如果不匹配,则后面的规则不在继续匹配。
vim /etc/httpd/conf/httpd.conf
在默认站点发布容器<Directory /var/www/html></Directory>中添加:
rewriteengine on
RewriteCond %{HTTP_REFERER} !^http://本地域名或IP地址/.*$ [NC] #格式:gg.cn engine:引擎 cond:条件
RewriteCond %{HTTP_REFERER} !^http://本地域名或IP地址$ [NC]
RewriteCond %{HTTP_REFERER} !^http://本地完整域名或IP地址/.*$ [NC] #格式:www.gg.cn
RewriteCond %{HTTP_REFERER} !^http://本地完整域名或IP地址$ [NC]
RewriteRule .*gif|jpg|png|swfgif|jpg|png|swf$ http://本地完整域名或IP地址/error.html [R,NC]
Require all granted(自带的)
ab站点压力测试
作用:对服务器的高并发量模式工作,或高数据流传输工作进行测试,保障服务器上线后的稳定性。
使用Apache自带的ab命令进行优化效果的测试。
# 语法:
ab -n 请求数总和 -c 并发用户数 网站网址
ab -n 10000 -c 1000 http://192.168.10.2/index.html
# 重要参数:
Time taken for tests #表示所有这些请求被处理完成所花费的总时间
Failed requests #表示失败的请求数量
Requests per second #吞吐率。计算公式: Complete requests / Time taken for tests
Transfer rate #表示这些请求在单位时间内从服务器获取的数据长度》
# 计算公式:
Total trnasferred/ Time taken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口带宽的需求量。
压力测试过程中,除ab以外,还会使用以下方法:
1.使用黑客工具对端口并发链接进行测试,如DDOS测试
2.使用多用户在线访问测试。如:将服务器挂在广域网后,找很多用户在线测试(公测)
3.通过虚拟客户端,使用测试工具进行高并发量测试。
4.找专业测试团队进行测试。
日志分析
作用:查看服务器的实时运行情况,比如哪些URL的访问请求数量最大+服务器每秒的请求数,制定正对性的优化方案。
安装软件:awstats(日志分析,工具)
安装awstats步骤:
1.解压软件
tar -zxvf awstats-7.3.tar.gz -C /usr/src
2.复制软件到local目录
cd /usr/src
mv awstats-7.3/ /usr/local/awstats
cd /usr/local/awstats/tools
3.给脚本添加可执行权限
chmod a+x awstats_configure.pl awstats_updateall.pl
4.执行配置脚本
./awstats_configure.pl
在以下标记方框的位置输入相关信息,
~输入web服务器的完整配置文件路径——“y”
~定义要创建的配置文件名(www.zhz666.com)
~定义配置文件路径(回车—回车—回车)
5.在hosts文件中添加域名
[root@localhost tools]# echo "192.168.10.1 www.guiguedu.cn" >> /etc/hosts
6.配置awstats配置文件,修改apache日志文路径
[root@localhost tools]# vim /etc/awstats/awstats.www.guiguedu.cn.conf
修改:
LogFile="/var/log/httpd/access_log" 50G
7.修改apache配置文件,修改访问权限
[root@localhost tools]# vim /etc/httpd/conf/httpd.conf
修改最后几行:
<Directory "/usr/local/awstats/wwwroot">
Options None
AllowOverride None
Order allow,deny
Allow from all
require all granted #关键操作
</Directory>
[root@localhost tools]# systemctl restart httpd
8.设置awstats目录的属主
[root@localhost tools]# chown -R apache:apache /usr/local/awstats/
[root@localhost tools]# mkdir /var/lib/awstats
[root@localhost tools]# chown apache:apache /var/lib/awstats/
9.立刻更新日志记录【可省】
[root@localhost tools]# /usr/local/awstats/tools/awstats_updateall.pl now
10.创建计划任务,每分钟更新一次【可省】
[root@localhost tools]# crontab -e
添加:
*/1 * * * * /usr/local/awstats/tools/awstats_updateall.pl now &> /dev/null
11.访问awstats主页
[root@localhost tools]# firefox http://www.guiguedu.cn/awstats/awstats.pl
日志分割
作用:如果Apache的访问量特别大,对于写日志的过程来说,将变成一种负担,我们需要使用多台服务器或多个文件进行日志的记录。
方法:
使用Apache自带的日志轮循程序写入工具rotatelogs进行日志分隔。
1、配置httpd.conf,定义日志名称
vim /etc/httpd/conf/httpd.conf
修改:
CustomLog "| /sbin/rotatelogs -l /var/log/httpd/access_%Y%m%d%H%M%S.log 2" combined
解释:
2秒切割一次日志文件(切割日志时间频率可以自行改变,根据PV来决定) -l选项是小写的L表示local time(本地时间)
2、重启服务器
3、客户端访问页面,查看日志文件
ll /var/log/httpd/
合并日志: 可以将每个服务器每天的日志文件通过 rsync 下载到专门进行访问统计分析的服务器上进行合并。合并多个服务器的日志文件,例如: log1 log2 log3 并输出到 log_all 中的方法是:
sort -m -t " " -k 4 -o log_all access_log1 access_log2 access_log3(这些名字要对应查看到的“日志文件”)
# 解释:
-m 使用 merge 优化算法
-t 指定排序的分割符
-k 4 指定排序时行中多列时,排序的依据列为哪列,表示根据时间进行排序
-o 表示将排序结果存放到指定的文件中
# 例:
sort -m -t " " -k 4 -o access_all_log access_20200414095902.log access_20200414095904.log access_20200414095906.log access_20200414095908.log
apache工作模式优化
修改工作模式:(删除#号的事情)
vim /etc/httpd/conf.modules.d/00-mpm.conf
# 修改:
LoadModule mpm_worker_module modules/mod_mpm_worker.so worker:工作(多进程多线程) module:模块 event:事件(worker模式的变种)
# 或者
LoadModule mpm_event_module modules/mod_mpm_event.so
拓展:
Linux httpd命令是Apache HTTP服务器程序。
httpd为Apache HTTP服务器程序。直接执行程序可启动服务器的服务。
# 语法
httpd [-hlLStvVX][-c<httpd指令>][-C<httpd指令>][-d<服务器根目录>][-D<设定文件参数>][-f<设定文件>]
# 参数说明:
[root@localhost ~]# httpd -help
-c<httpd指令> 在读取配置文件前,先执行选项中的指令。
-C<httpd指令> 在读取配置文件后,再执行选项中的指令。
-d<服务器根目录> 指定服务器的根目录。
-D<设定文件参数> 指定要传入配置文件的参数。
-f<设定文件> 指定配置文件。
-h 显示帮助。
-l 显示服务器编译时所包含的模块。
-L 显示httpd指令的说明。
-S 显示配置文件中的设定。
-t 测试配置文件的语法是否正确。
-v 显示版本信息。
-V 显示版本信息以及建立环境。
-X 以单一程序的方式来启动服务器。
# 例:
[root@localhost ~]# httpd -t 检查配置文件语法错误
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Syntax OK
[root@localhost ~]# httpd -l 显示编译模块
Compiled in modules:
core.c
mod_so.c
http_core.c
Never put off till tomorrow what you can do today…