apache优化配置
案例环境:系统类型IP地址主机名所需软件Centos 6.5 64bit192.168.100.150www.linuxfan.cnhttpd-2.2.17.tar.gz注:编译安装时的命令...
案例环境:
系统类型 | IP地址 | 主机名 | 所需软件 |
Centos 6.5 64bit | 192.168.100.150 | www.linuxfan.cn | httpd-2.2.17.tar.gz |
注:编译安装时的命令 ./configure --prefix=/usr/local/httpd --enable-cgi --enable-rewrite --enable-so --enable-deflate --enable-expires |
一、apache优化之保持连接、网页传输压缩、页面缓存时间;
1.保持连接、长链接(keep-alive):
作用:HTTP协议是TCP的子协议,HTTP建立连接时需要先建立TCP连接,断开时也需要端口TCP连接,TCP的建立和断开消耗的资源通过HTTP 连接保持可以节约下来。对于 HTTP/1.1,尽量地保持客户端的TCP连接,通过一个TCP连接传送多个 HTTP 请求响应,对于客户端可以提高 50%以上的响应时间,对于服务器可以降低建立与关闭TCP连接时的资源消耗。
配置项:
keepalive ON|OFF | 是否打开保持连接功能。根据网站的并发请求量决定是否打开,高并发时打开,并发量不高时可选择关闭。 |
keepalive timeout | 一次TCP连接多次HTTP请求之间的最大间隔时间,两次HTTP请求超过此时间连接将会断开。 |
maxkeepaliverequestes | 一次TCP连接能够传输的最大HTTP请求数量。 |
[root@www ~]# vi /usr/local/httpd/conf/extra/httpd-default.conf
16 KeepAlive On
23 MaxKeepAliveRequests 100
29 KeepAliveTimeout 20
:wq
[root@www ~]# sed -n '/httpd-default.conf/p' /usr/local/httpd/conf/httpd.conf ##查看
#Include conf/extra/httpd-default.conf
[root@www ~]# sed -i '/httpd-default.conf/s/^#//g' /usr/local/httpd/conf/httpd.conf ##去除注释
[root@www ~]# sed -n '/httpd-default.conf/p' /usr/local/httpd/conf/httpd.conf ##查看验证
Include conf/extra/httpd-default.conf
[root@www ~]# sed -i '97s/^#//g' /usr/local/httpd/conf/httpd.conf
[root@www ~]# sed -i 's/www.example.com/www.linuxfan.cn/g' /usr/local/httpd/conf/httpd.conf
[root@www ~]# /usr/local/httpd/bin/apachectl start
访问抓包验证:
2.apache网页压缩:
作用:配置 Apache 的网页压缩功能,是使用 Gzip 压缩算法来对 Apache 服务器发布的网页内容进行压缩后再传输到客户端浏览器。通常在cpu有空闲,网站带宽占用高时,会启用压缩;
优势:
1)加快网页加载的速度,改善用户的浏览体验
2)降低网络传输带宽, 服务器节省流量
3)网页压缩有利于搜索引擎的抓取
方式:Apache 能实现网页压缩功能的模块有 mod_gzip 模块和 mod_deflate 模块
注意:编译安装时需要使用以下配置项;
--enable-deflate ##启用deflate模块,注意必须安装依赖包“zlib-devel”
配置项:
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript | 对什么格式的内容启用压缩 |
DeflateCompressionLevel 9 | 压缩级别为9,范围是1-9,数字大压缩率高 |
SetOutputFilter DEFLATE | 启用deflate压缩方式 |
[root@www ~]# /usr/local/httpd/bin/apachectl -D DUMP_MODULES |grep deflate
deflate_module (static)
Syntax OK
[root@www ~]# vi /usr/local/httpd/conf/httpd.conf ##在最后添加如下配置
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
:wq
[root@www ~]# /usr/local/httpd/bin/apachectl start
访问并抓包验证:
3.apache页面缓存时间:
作用:通过 mod_expires 模块配置 Apache,使网页能在客户端浏览器缓存一段时间,以避免重复请求,减轻服务端工作压力。启用 mod_expires 模块后,会自动生成页面头部信息中的 Expires 标签和 CacheControl 标签,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的。
注意:编译安装时必须使用以下配置项
--enable-expires ##启用网页缓存过期时间模块
配置项:
<IfModule mod_expires.c>
ExpiresActive On ##启用页面缓存时间
ExpiresDefault "access plus 60 seconds" ##设置默认缓存1分钟
</IfModule>
[root@www ~]# /usr/local/httpd/bin/apachectl -D DUMP_MODULES |grep expires
expires_module (static)
Syntax OK
[root@www ~]# vi /usr/local/httpd/conf/httpd.conf ##在最后添加如下配置
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 60 seconds"
</IfModule>
清楚浏览器历史记录,重新访问测试:
二、apache优化隐藏版本号;
方式一:
[root@www ~]# vi /usr/local/httpd/conf/httpd.conf ##添加在末尾
ServerTokens Prod ##显示最少的信息,默认是Full显示完整信息
ServerSignature Off ##生成页面的页脚
访问测试验证:
方式二:
如果是源代码编译安装,还可以用修改源码编译的方法:进入 Apache 的源码目录下的 include 目录, 编辑 ap_release.h 这个文件如下变量,然后重新编译安装即可:
42 #define AP_SERVER_BASEVENDOR "linuxfan.cn Software Foundation"
43 #define AP_SERVER_BASEPROJECT "Miscrosoft-IIS"
44 #define AP_SERVER_BASEPRODUCT "Microsoft-IIS"
45
46 #define AP_SERVER_MAJORVERSION_NUMBER 6
47 #define AP_SERVER_MINORVERSION_NUMBER 6
48 #define AP_SERVER_PATCHLEVEL_NUMBER 6
三、apache优化之防盗链;
作用:防盗链就是防止别人盗用服务器中的图片、文件、视频等相关资源。运维人员可以通过apache提供rewrite模块进行优化。
配置项:
RewriteEngine ON | ##打开网页重写功能 |
RewriteCond | ##设置匹配规则 |
RewriteRule | ##设置跳转动作 |
rewrite的规则:%{HTTP_REFERER} 浏览 header 中的链接字段,存放一个连接的 URL,代表是从哪个链接访问所需的网页。
!^ | 不以某个字段开头 |
.*$ | 以任意字符结尾 |
NC | 不区分大小写 |
R | 强制跳转 |
规则匹配:如果相应变量的值匹配所设置的规则,则逐条往下处理;如果不匹配,则后面的规则不再继续匹配。
配置实例:
[root@www ~]# vi /usr/local/httpd/conf/httpd.conf
在<Directory “/usr/local/httpd/htdocs”> 区域中,添加:
RewriteEngine On ##启用重写功能
RewriteCond %{HTTP_REFERER} !^http://linuxfan.cn/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://linuxfan.cn$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.linuxfan.cn/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.linuxfan.cn$ [NC]
RewriteRule .*\.(gif|jpg|png|swf)$ http://www.linuxfan.cn/error.html [R,NC]
</Directoy>
最终匹配结果为:第二、三、四、五行的信任站点,能够使用网站上的图片;处理信任站点以外的站点,如果访问或使用 http://www.linuxfan.cn 域名以外的 gif、 jpg、 swf结尾的文件将跳转到重定向页面。
案例:
1.案例环境:
系统类型 | IP地址 | 主机名 | 所需软件 |
Centos 6.5 64bit | 192.168.100.150 | linuxfan | httpd-2.2.17.tar.gz |
Centos 6.5 64bit | 192.168.100.151 | linuxren | httpd-2.2.17.tar.gz |
2.安装配置linuxfan主机的httpd服务;
[root@linuxfan ~]# tar zxvf httpd-2.2.17.tar.gz -C /usr/src/
[root@linuxfan ~]# cd /usr/src/httpd-2.2.17/
[root@linuxfan httpd-2.2.17]#./configure --prefix=/usr/local/httpd --enable-cgi --enable-rewrite --enable-so && make && make install
[root@linuxfan httpd-2.2.17]# cd
[root@linuxfan ~]# sed -i '97s/^#//g' /usr/local/httpd/conf/httpd.conf
[root@linuxfan ~]# sed -i 's/www.example.com/www.linuxfan.cn/g' /usr/local/httpd/conf/httpd.conf
[root@linuxfan ~]# cat <<END >/usr/local/httpd/htdocs/index.html
<html>
<head><title></title></head>
<body>
<h1>www.linufan.cn</h1>
<img src="./linux.jpg" />
</body>
</html>
END
[root@linuxfan ~]# ls /usr/local/httpd/htdocs/
index.html linux.jpg
[root@linuxfan ~]# /usr/local/httpd/bin/apachectl start
访问测试:
3.安装配置linuxren主机的httpd服务;
[root@linuxren ~]# tar zxvf httpd-2.2.17.tar.gz -C /usr/src/
[root@linuxren ~]# cd /usr/src/httpd-2.2.17/
[root@linuxren httpd-2.2.17]#./configure --prefix=/usr/local/httpd --enable-cgi --enable-rewrite --enable-so && make && make install
[root@linuxren httpd-2.2.17]# cd
[root@linuxren ~]# sed -i '97s/^#//g' /usr/local/httpd/conf/httpd.conf
[root@linuxren ~]# sed -i 's/www.example.com/www.linuxren.cn/g' /usr/local/httpd/conf/httpd.conf
[root@linuxren ~]# cat <<END >/usr/local/httpd/htdocs/index.html
<html>
<head><title> </title></head>
<body>
<h1>www.linuxren.cn </h1>
<img src="http://www.linuxfan.cn/linux.jpg" alt="访问被拒绝了!对方设置了防盗链!" />
</body>
</html>
END
[root@linuxren ~]# /usr/local/httpd/bin/apachectl start
访问测试:
4.为linuxfan网站设置防盗链,防止linuxren网站盗用图片;
[root@linuxfan ~]# vi /usr/local/httpd/conf/httpd.conf
132 <Directory "/usr/local/httpd/htdocs">
133 RewriteEngine On
134 RewriteCond %{HTTP_REFERER} !^http://linuxfan.cn/.*$ [NC]
135 RewriteCond %{HTTP_REFERER} !^http://linuxfan.cn$ [NC]
136 RewriteCond %{HTTP_REFERER} !^http://www.linuxfan.cn/.*$ [NC]
137 RewriteCond %{HTTP_REFERER} !^http://www.linuxfan.cn$ [NC]
138 RewriteRule .*\(gif|jpg|png|swf\)$ http://www.linuxfan.cn/error.html [R,NC]
:wq
[root@linuxfan ~]# echo "deny" >>/usr/local/httpd/htdocs/error.html
[root@linuxfan ~]# /usr/local/httpd/bin/apachectl restart
访问验证:
四、apache的ab压力测试;
作用:Apache 附带了压力测试工具 ab,非常容易使用,并且完全可以模拟各种条件对 Web 服务器发起测试请求。在进行性能调整优化过程中,可用 ab 压力测试工具进行优化效果的测试。
语法:ab -n 请求数总和 -c 并发用户数 网站网址
重要参数:
Time taken for tests ##表示所有这些请求被处理完成所花费的总时间
Failed requests ##表示失败的请求数量
Requests per second ##吞吐率,计算公式: Complete requests / Time taken for tests
Transfer rate ##表示这些请求在单位时间内从服务器获取的数据长度,计算公式:Total trnasferred/ Time taken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。
[root@linuxfan ~]# /usr/local/httpd/bin/ab -n 1000 -c 80 http://192.168.100.150/index.html
拓展:自行百度apache其他性能压力测试工具
五、apache 日志分析工具;
方式一:apachetop工具
作用:查看服务器的实时运行情况,比如哪些 URL 的访问量最大,服务器每秒的请求数,等等。apachetop 就是这样一个工具, 能够让你实时的监测 apache 服务器的运行状况。
[root@linuxfan ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.rep
[root@linuxfan ~]# yum -y install epel-release
[root@linuxfan ~]# yum -y install apachetop
[root@linuxfan ~]# apachetop -f /usr/local/httpd/logs/access_log
last hit: 06:14:54 atop runtime: 0 days, 00:00:05 06:14:55
All: 6 reqs ( 3.0/sec) 0.0B ( 0.0B/sec) 0.0B/req
2xx: 0 ( 0.0%) 3xx: 6 ( 100%) 4xx: 0 ( 0.0%) 5xx: 0 ( 0.0%)
R ( 5s): 6 reqs ( 1.2/sec) 0.0B ( 0.0B/sec) 0.0B/req
2xx: 0 ( 0.0%) 3xx: 6 ( 100%) 4xx: 0 ( 0.0%) 5xx: 0 ( 0.0%)
REQS REQ/S KB KB/S URL
3 1.50 0.0 0.0*/
3 1.50 0.0 0.0 /linux.jpg
方式二:awstats日志分析系统
作用:Awstats 软件是一个由perl语言所编写的免费强大的服务器的日志文件分析工具,显示你所有的网页/邮件/ FTP统计包括访问,访问者,页面,点击,高峰时间,操作系统,浏览器,搜索引擎,关键字。
[root@linuxfan ~]# tar zxvf awstats-7.3.tar.gz
[root@linuxfan ~]# mv awstats-7.3 /usr/local/awstats
[root@linuxfan ~]# cd /usr/local/awstats/tools
[root@linuxfan tools]# chmod +x ./*
[root@linuxfan tools]# ./awstats_configure.pl
Do you want to continue setup from this NON standard directory [yN] ? Y
Config file path ('none' to skip web server setup):
> /usr/local/httpd/conf/httpd.conf
Do you want me to setup Apache to write 'combined' log files [y/N] ? Y
Do you want me to build a new AWStats config/profile
file (required if first install) [y/N] ? Y
Your web site, virtual server or profile name:
> www.linuxfan.cn
Directory path to store config file(s) (Enter for default): 回车
Press ENTER to continue... 回车
Press ENTER to finish... 回车
[root@linuxfan tools]# cd
[root@linuxfan ~]# vi /etc/awstats/awstats.www.linuxfan.cn.conf
LogFile="/usr/local/httpd/logs/access_log" ##修改第 50 行
:wq
[root@linuxfan ~]# mkdir /var/lib/awstats
[root@linuxfan ~]# echo "*/5 * * * * /usr/local/awstats/tools/awstats_updateall.pl now" >/var/spool/cron/root
[root@linuxfan ~]# /etc/init.d/crond restart
[root@linuxfan ~]# /usr/local/awstats/tools/awstats_updateall.pl now ##执行首次更新,如若更新访问数据无法更新,出现日志格式问题,需要调整日志格式为combined格式,如若已经为该模式,可将日志文件删除,重启服务生成即可
[root@linuxfan ~]# /usr/local/httpd/bin/apachectl restart
访问测试:
http://www.linuxfan.cn/awstats/awstats.pl?config=www.linuxfan.cn
六、apache访问控制;
作用:为apache服务提供的页面设置客户端访问权限,为某个组或者某个用户加密访问;
[root@linuxfan ~]# /usr/local/httpd/bin/htpasswd -c /usr/local/httpd/conf/htpasswd zs ##添加admin用户,可以在两个路径中间添加-c是新建文件删除原文件
New password: ##输入密码pwd@123
Re-type new password: ##确认密码
Adding password for user zs
[root@linuxfan ~]# cat /usr/local/httpd/conf/htpasswd
zs:TpPLVJuXl0wsE
[root@linuxfan ~]# /usr/local/httpd/bin/htpasswd /usr/local/httpd/conf/htpasswd ls
New password: ##输入密码pwd@123
Re-type new password: ##确认密码
Adding password for user ls
[root@linuxfan ~]# /usr/local/httpd/bin/htpasswd /usr/local/httpd/conf/htpasswd ww
New password: ##输入密码pwd@123
Re-type new password: ##确认密码
Adding password for user ww
[root@linuxfan ~]# vi /usr/local/httpd/conf/htgroups ##为授权用户加入组
mygroup: zs ls ##组名: 成员1 成员2
[root@linuxfan ~]# vim /usr/local/httpd/conf/httpd.conf
421 <Directory "/usr/local/awstats/wwwroot">
422 Options None
423 AllowOverride None
424 Order allow,deny
425 Allow from 192.168.100.110
426 AuthType Basic ##定义认证的类型为Basic
427 AuthName "Log analysis system" ##提示短语
428 AuthBasicProvider file ##提供认证者为file
429 AuthUserFile /usr/local/httpd/conf/htpasswd ##指定认证用户文件
430 AuthGroupFile /usr/local/httpd/conf/htgroups ##指定认证组文件
431 Require group mygroup ##设置允许访问的用户或者组,如果设置为所有用户改为“Require valid-user”即可,若设置单个用户为Require user 用户名 即可;
432 </Directory>
:wq
[root@linuxfan ~]# /usr/local/httpd/bin/apachectl restart
访问测试:
http://www.linuxfan.cn/awstats/awstats.pl?config=www.linuxfan.cn
##输入用户测试,zs与ls能登录,ww不能登录
七、apache优化之日志分割;
作用:随着网站访问量的增加,访问日志中的信息会越来越多, Apache 默认访问日志access_log单个文件会越来越大,日志文件体积越大,信息都在一个文件中,查看及分析信息会及不方便。
实现方式:
1.利用 apache 自带的日志轮循程序 rotatelogs
ErrorLog "|rotatelogs 命令的绝对路径 -l logs/error_%Y%m%d_%H%M%S.log 秒数"
CustomLog "| rotatelogs 命令的绝对路径-l logs/access_%Y%m%d_%H%M%S.log 秒数"
combined
2.利用一个发展已经比较成熟的日志轮循工具 cronolog
ErrorLog "|cronolog 绝对路径 -l /usr/local/httpd/logs/error_%Y%m%d%H%M%S.log "
CustomLog "|cronnolog绝对路径 -l /usr/local/httpd/logs/access_%Y%m%d%H%M%S.log" combined
3.利用定时任务和 shell 脚本做日志切割
方式一: 利用 apache 自带的日志轮循程序 rotatelogs日志分割:
[root@linuxfan ~]# vi /usr/local/httpd/conf/httpd.conf ##10秒切割一次日志文件(切割日志时间频率可以自行改变,根据PV来决定,),-l选项是小写的L表示local time(本地时间)
216 CustomLog "|/usr/local/httpd/bin/rotatelogs -l /usr/local/httpd/logs/access_%Y%m%d%H%M%S.log 10" combined
:wq
[root@linuxfan ~]# /usr/local/httpd/bin/apachectl restart
[root@linuxfan ~]# ls /usr/local/httpd/logs/
access_20171205054810.log error_log
access_20171205054820.log httpd.pid
方式二:利用一个发展已经比较成熟的日志轮循工具 cronolog
[root@linuxfan ~]# tar xf cronolog-1.6.2.tar.gz -C /usr/src/
[root@linuxfan ~]# cd /usr/src/cronolog-1.6.2/
[root@linuxfan cronolog-1.6.2]# ./configure && make && make install
[root@linuxfan cronolog-1.6.2]# cd
[root@linuxfan ~]# which cronolog
/usr/local/sbin/cronolog
[root@linuxfan ~]# vi /usr/local/httpd/conf/httpd.conf ##可以跟据文件名中的变量来设置分割的频率,Y表示四位年份、m表示月份、d表示月份中的天数
213 CustomLog "|/usr/sbin/cronolog /usr/local/httpd/logs/access_%Y%m%d.log" combined
:wq
[root@linuxfan ~]# /usr/local/httpd/bin/apachectl restart
[root@linuxfan ~]# ls /usr/local/httpd/logs/
access_20171206.log access_log error_log httpd.pid
方式三:脚本完成(定期移动httpd日志文件,并且保存期限为30天):
[root@linuxfan ~]# vi /opt/cut_httpd_log.sh
#!/bin/bash
logpath="/usr/local/httpd/logs"
datetime=$(date -d "-1 day" "+%Y%m%d")26 / 27
[ -d $logpath/backup ] || mkdir $logpath/backup
mv $logpath/access_log $logpath/backup/access_log-$datetime
/usr/local/httpd/bin/apachectl graceful ##
find $logpath/backup/ -mtime +30 | xargs rm –f
[root@linuxfan ~]# chmod +x /opt/cut_httpd_log.sh
[root@linuxfan ~]# echo "00 00 * * * /bin/bash /opt/cut_httpd_log.sh &> /dev/null" >>/var/spool/cron/root
[root@linuxfan ~]# service crond restart
日志合并:
可以将每个服务器每天的日志文件通过 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 表示将排序结果存放到指定的文件中
八、apache实现虚拟主机;
作用:在同一台服务器实现部署多个网站站点,节省资源;
实现方式:
1.不同IP,不同域名,相同端口;
2.相同IP,相同域名,不同端口;
3.相同IP,相同端口,不同域名;
方式一:不同IP,不同域名,相同端口;
[root@linuxfan ~]# ifconfig eth0:0 192.168.100.200
[root@linuxfan ~]# ip a |grep 192.168.100
inet 192.168.100.150/24 brd 192.168.100.255 scope global eth0
inet 192.168.100.200/24 brd 192.168.100.255 scope global secondary eth0:0
[root@linuxfan ~]# vi /usr/local/httpd/conf/httpd.conf
394 Include conf/extra/httpd-vhosts.conf
[root@linuxfan ~]# vi /usr/local/httpd/conf/extra/httpd-vhosts.conf
更多推荐
所有评论(0)