Apache深度优化

Apache深度优化
一、 开启apache的Gzip(defalte)功能
gzip 可以极大的加速网站,有时压缩比率高到 80%,最少都有 40%以上,还是相当不错的。 在 Apache2 之后的版本,模块名不叫 gzip,而叫 mod_deflate

在apache1.0版本软件本身不支持页面的压缩功能,通过第三方模块gzip完成,到2.2版本apache软件基金会自己开发了deflate压缩模块
deflate压缩模块相比gzip压缩效率低,消耗资源少,压缩速度快,在压缩过程中需要定义压缩等级0-9数字越大压缩比例越大,消耗资源越多,一般定义压缩等级时会去中间参数

如果要开启deflate的话,必须要打开两个模块:
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so

安装mod_delfate的两种安装方法:
1、编译时安装:
编译安装是后面跟—enable-deflate即可安装

2、DSO方式安装:
如果在编译安装时没有开启—enable-deflate则可以使用这种方式安装:
[[email protected] ~]# cd /usr/src/httpd-2.4.23/modules/filters/ ##切换到apache源码包 mod_defalte所在的目录下
/usr/local/http-2.4.23/bin/apxs -c -i -a mod_deflate.c ##进行安装mod_deflate.c
-c:执行编译安装操作 -i:执行安装操作 -a:会自动在http.conf文件中增加一个LoadModule以启用此模块,如果此行已经存在,则直接启用
如果报错:

原因是缺少 zlib-devel 的安装包,装上就可以了:yum -y install zlib-devel,然后在此执行/usr/local/http-2.4.23/bin/apxs -c -i -a mod_deflate.c这个命令
检查mod_deflate是否安装:成功安装会在这里显示该文件

安装完成后修改apache配置文件开启gzip压缩传输:
在http.conf中修改

这样就可以启动这两个模块:
mod_deflate 是压缩模块,就是对要传输到客户端的代码进行 gzip 压缩
mod_headers 模块的作用是告诉浏览器页面使用了 gzip 压缩,如果不开启 mod_headers 那么浏览器就会 对 gzip 压缩过的页面进行下载,而无法正常显示
LoadModule /usr/lib64/libz.so:如果使用DSO方式安装的deflate模块需要声明,没用可以不用写

在文件最后添加压缩级别等参数:


DeflateCompressionLevel 9:压缩程度的等级,预设可以采用 6 这个数值,以维持 耗用处理器效能与网页压缩质量的平衡。
SetOutputFilter DEFLATE:设置输出过滤器,对输出启用压缩,必须的,就像一个 开关一样,告诉 apache 对传输到浏览器的内容进行压缩
AddOutputFilterByType DEFLATE text/*:设置对文件是文本的内容进行压缩,例如 text/html text/css text/plain 等
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary:设置不对后缀 gif,jpg,jpeg,png 的图片文件进行压缩。注:?:表示不会捕获 ( )里内容了
设置日志输出:

DeflateFilterNote Input input_info:声明输入流的 byte 数量
DeflateFilterNote Output output_info:声明输出流的 byte 数量
DeflateFilterNote Ratio ratio_info:声明压缩的百分比 LogFormat ‘"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)‘ deflate:声明日志格式
修改完成后保存退出重启httpd服务
访问,测试:
在浏览器按F2(打开开发者工具)输入apache服务器的IP(192.168.1.10)

查看日志:

说明在传输时已经压缩

二、 开启apache的缓存功能,配置mod——expoires模块
这个非常有用的优化,mod_expires 可以减少 20-30%左右的重复请求,让重复的用户对指定 的页面请求结果都 CACHE 在本地,根本不向服务器发出请求。但要注意更新快的文件不要 这么做。
这个模块控制服务器应答时的 Expires 头内容和 Cache-Control 头的 max-age 指令。有效期 (expiration date)可以设置为相对于源文件的最后修改时刻或者客户端的访问时刻。
LoadModule expires_module modules/mod_expires.so ##在配置文件中去点注释

语法:ExpiresByType:定义缓存页面 text/html:指定缓存界面的类型 A60:缓存页面的时间
ExpireActive On:开启缓存功能
ExpiresByType text/html M60:页面最后一次修改缓存60
ExpiresByType image/png A60:图片缓存,和ExpiresByType image/png "access plus 1 month"意思相同
ExpiresDefault "now plus 0 minute":其他页面不进行缓存
测试:

三、 禁止apache目录遍历:
将 Options Indexes FollowSymLinks 中的 Indexes 去掉,就可以禁止 Apache 显示该目录结构。 Indexes 的作用就是当该目录下没有 index.html 文件时,就显示目录结构
首先制造一个没有index.html的现象,然后访问看一下

这样的话如果客户端访问就能看到公司内部的网站目录结构,这样不安全,然后禁止目录遍历即可

在下面位置将Options Indexes FollowSymLinks修改为Options FollowSymLinks即可:
DocumentRoot "/usr/local/httpd/htdocs"
<Directory "/usr/local/httpd/htdocs">
Options FollowSymLinks

四、 隐藏apache版本信息:
测试默认apache的状态信息:

编辑著配置文件调用httpd-defalut.conf配置文件:去掉注释

修改/usr/local/httpd/conf/extra/httpd-default.conf文件:
找到 ServerTokens Full修改为ServerTokens Prod
重启apache测试:

如果你需要彻底将版本之类的信息进行改头换面,你就需要在编译之前做准备或者进行从新编译了。在重新编译时,修改源码包下include目录下的ap_release.h 这个文件
#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 23 #补丁级别
#define AP_SERVER_DEVBUILD_BOOLEAN 0 #
上述列出的行,已经给出了注释,大家可以修改成自己想要的,然后编译安装之后,对方就彻底不知道你的版本号了。

五、 apache日志切割:
为什么要分割日志:
随着网站的访问越来越大,WebServer 产生的日志文件也会越来越大,如果不对日志进行分 割,那么只能一次将大的日志(如 Apache 的日志)整个删除,这样也丢失了很多对网站比较 宝贵的信息,因为这些日志可以用来进行访问分析、网络安全监察、网络运行状况监控等, 因此管理好这些海量的日志对网站的意义是很大的。
方法一:使用 rotatelogs(apache 自带的工具)每隔一天记录一个日志
修改apache的主配置文件:
将如下两行注释:
ErrorLog logs/error_log
CustomLog logs/accesslog common
添加如下两行:
ErrorLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/error
%Y%m%d.log 86400" CustomLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/access_%Y%m%d.log 86400" combined 注意:其中86400为轮转的时间单位为秒,也就是一天


注意:rotatelogs这个要写绝对路径,可以使用which来查询它的路径:

验证:查看logs目录下的日志文件:
由于 apache 自带的日志轮询工具 rotatelogs,据说在进行日志切割时容易丢日志,因此我们 通常使用 cronolog 进行日志轮询。
方法二:使用cronolog为每一天建立一个新的日志
下载安装cronolog程序:
还是在主配置文件中修改:
添加如下两行:

如果 Apache 中有多个虚拟主机,最好每个虚拟主机中放置一个这样的代码,并将日志文件 名改成不同的名字
扩展:
这个保证了每天一个文件夹文件夹下每个小时产生一个 log
CustomLog "|/usr/local/sbin/cronolog logs /%Y%m%d/access_log.%H" combined
验证:

cronolog和rotatelogs的区别:
使用 cronolog 时如果日志是放在某个不存 在的路径则会自动创建目录,而使用 rotatelogs 时不能自动创建,这一点要特别注意
六、 配置防盗链:
有时候,你的网站莫名其妙的访问量变大,不要高兴的太早,有可能是被别人盗链了。
举个例子:比如你搭了个 discuz 论坛,里面有些热点图片、视频;然后别人将他网站上访问 图片的地址重定向到你的 discuz 上,这样他的服务器就可以空闲出来了;也就是说别人访问 他网站的图片视频,消耗的确是你服务器的资源
解决这个问题的方法是配置下防盗链,让外来的盗不了链:
开启apache防盗链功能:

<Directory "/usr/local/httpd/htdocs">在这里面添加如下几行:

RewriteEngine On #启用 rewrite,要想 rewrite 起作用,必须要写上
R:强制重定向 NC:忽略大小写 L:表示如果能匹配本条规则,那么本条规则是最后一条(Last),忽略之后的规则
再打开一个虚拟机,安装httpd服务进行测试:
安装httpd服务:yum -y install httpd
web页面内容为:<a href="http://192.168.1.10/image.png">lianjie</a&gt;
测试:
在浏览器输入httpd服务器的IP地址(192.168.1.20)访问:

原文地址:https://blog.51cto.com/14256937/2441962

时间: 2024-07-28 18:20:31

Apache深度优化的相关文章

Apache 深度优化 ab压力测试

网站性能压力了测试是服务器网站性能调优过程中必不可少的一环,只有让服务器处在高压的情况下,才能真正体现出软件.硬件等各种设置不当所暴露出的问题. 性能测试工具目前最常见的有以下几种:ab.http_load.webbench.siege.ab是Apache自带的压力测试工具,非常实用,可以模拟多线程并发请求,测试服务器负载压力.它不仅可以对Apache服务器进行网站访问压力测试,而且可以对其他类型服务器进行压力测试.ab对发出负载的计算机要求很低,既不会占用很多CPU,也不会占用太多内存,但却会

LAMP和LNMP深度优化

LAMP与LNMP web架构深度优化 企业连接数据库一般用域名,因为连接数据库的文件可能有多个,那么当一旦数据库ip改了,那么数据库连接的文件也都需要修改,这样极容易漏掉而出现错误,正确的做法是每个数据库连接文件里都写连接数据库的域名,然后在本地host里将数据库ip及域名做一个解析 数据库tar备份数据文件 必须停机才能保持备份的数据库和线上的一致,那么企业是不可能随意停机的,所以一般会用到热备工具如mysqldump等进行实时同步备份. 必须要总结的: nginx.conf httpd.c

Nginx深度优化(二)

Nginx作为现在最流行的Web应用程序,对其优化十分重要.通过Nginx初步优化.深度优化Nginx(一)已经可以对Nginx进行大量的优化来满足基本的需要,但是作为一名合格的运维工程师来说,仅仅掌握以上对Nginx进行优化的方法显然是远远不足的.所以就需要本篇博文进一步对Nginx进行优化. 博文大纲:一.安装nginx服务器二.Nginx配置优化(1)Nginx 运行工作进程个数(2)Nginx 事件处理模型 (3)开启高效传输模式(4)连接超时时间(5)fastcgi调优(6)expir

大型网站MySQL深度优化揭秘 2

学无止境,老男孩教育成就你人生的起点! 相信自己相信老男孩!!! 老男孩-51cto-公开课-大型网站MySQL深度优化揭秘 部分整理有没跟上的抱歉 ? 目 录 大型网站MySQL深度优化揭秘????2 第1章 优化的思路和线路????2 1.1 网站优化的思路????2 1.2 MySQL优化,nginx这样的东西怎么优化?????2 第2章 硬件层面优化????3 2.1 数据库物理机????3 2.1.1 CPU????3 2.1.2 Memory????3 2.1.3 disk(磁盘IO

实训之countdown深度优化

今天开始我们为期三周的实训,讲道理很紧张.我们两个多月的时间,小组成员磨合的非常好,可以说是有点默契的程度了,凝聚力明显提高.今天的分组之后立马投入这次实训中. 首先要确定我们这次实训目标,我们选择了继续强化我们的项目.在前段时间配合的不是很理想到通力合作做出粗略的基本功能的实现,我们每个人都付出了很多.这次我们希望继续深入下去这个项目,让它不再是一个简单的功能性软件,我们打算加入一些全新的功能点进去,让这个项目成为我们之前规划中小巧简便实用性高的产品. 首先我们希望加入登录注册,在使用过程中可

Linux课程笔记 Apache的优化

Apache服务优化 1 配置Apache日志轮询 apache自带的日志轮询工具也是可以使用的,但是老师测试会丢日志,所以采用cronolog来配置日志轮询 tar zxf cronolog-1.6.2.tar.gz cd cronolog-1.6.2 ./configure make make install <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "/var/html/www" Ser

linux下编译安装的Apache安全优化方案

上节我们学习了Linux的系统优化解决方案,我个人总结为18项,当然还有别的,例如系统内核裁剪这些我没讲到,为什么呢?大家不用太关心了,要记得我们学习的目的是能够胜任工作即可.我们对一个知识点不要讲的太深,避免钻进死胡同了,那就不好啦. 今天我们讲解下lamp架构安全优化中的Apache服务的安全优化.在讲这节内容之前我说下,静态web请求的流程: 当客户端访问一个静态网站的时候,网站上的Apache服务就会给他发送html文档给客户端浏览器,客户端浏览器会进行解析,然后就是我们看到的内容了.

ASP.NET WebApi 文档Swagger深度优化

本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明博客园蜗牛原文地址,cnblogs.com/tdws 写在前面 请原谅我这个标题党,写到了第100篇随笔,说是深度优化,其实也并没有什么深度.源码也没怎么修改,如果你想使用WebApi Swagger文档,请先移步到上一篇的中度优化. 第一篇:ASP.NET WebApi 文档Swagger中度优化 http://www.cnblogs.com/tdws/p/6100126.html 第二篇:ASP.NET WebApi 文档Swashbu

Windows下Apache的优化

Windows下Apache的优化 (2012-06-02 13:00:35) 转载▼ (1)首选查看apache的工作模式windows下的查看apache的工作模式命令:httpd -l如果列出mod_win32.c,则表示是 win32.c 工作方式. 列出的全部内容如下所示:core.cmod_win32.cmpm_winnt.chttp_core.cmod_so.c mpm_winnt.c是专门针对Windows NT优化的MPM(多路处理模块),它使用一个单独的父进程产生一个单独的子