上节我们学习了Linux的系统优化解决方案,我个人总结为18项,当然还有别的,例如系统内核裁剪这些我没讲到,为什么呢?大家不用太关心了,要记得我们学习的目的是能够胜任工作即可。我们对一个知识点不要讲的太深,避免钻进死胡同了,那就不好啦。
今天我们讲解下lamp架构安全优化中的Apache服务的安全优化。在讲这节内容之前我说下,静态web请求的流程:
当客户端访问一个静态网站的时候,网站上的Apache服务就会给他发送html文档给客户端浏览器,客户端浏览器会进行解析,然后就是我们看到的内容了。
对Web服务Apache的安全优化,首先我们要了解其原理,然后才能入手怎么安全优化。这里我简单说下他的原理:
Apache HTTP服务器是一个模块化的软件,他采用的是采用的MPM(Multi -Processing Modules,多道处理模块)
MPM是Apache的核心,它的作用是管理网络连接、调度请求。
Apache2.0中MPM分为3种(perfork、worker、event)。
perfork它采用的是进程管理方式,所以它可以提供更可靠的性能和更好的兼容性;
worker是Apache2.0中新增加的方式,它采用了线程控制方法,可以比perfork更节约系统开销、处理更多的数据量,但同时兼容性并不是很好,很多旧的程序无法工作在worker下;
event仍处于试验阶段,它为每个任务分配不同的进程池,目前不应该采用。
通过命令 /application/apache/bin/apachectl -l可以获取目前Apache采用的是哪种MPM(注意这里我是采用编译安装的)
本文仅针对perfork方式进行讨论
现在我们开始修改我们的配置文件了。我们先回顾下Apache的文件有哪些?
bin目录用于存放Apache的一些可执行程序
cgi-bin目录用于存放cgi程序的相关程序
conf目录存放Apache的主配置文件及其他扩展文件
error目录用于存放一些错误信息
lib目录用于存放Apache的库文件
logs目录用于存放Apache的程序日志包括访问日志和错误日志
man目录用于存放 Apache的帮助文档
modules目录用于存放各种模块文件
htdocs目录用于存放网页文档
从上们知道apache采用的是perfork模式。默认Apache的配置文件里没有开启调节进程参数的功能,我们要现在主配置文件里打开此项如下:
修改为如下表示开启prefork.c进程管理
怎么改呢?我们知道那个目录,然后打开就可以看到相应的内容
StartServers 5 #启动apache时启动的httpd进程个数。
MinSpareServers 5#服务器保持的最小空闲进程数。
MaxSpareServers 10#服务器保持的最大空闲进程数。
MaxClients 150 #最大并发连接数。
MaxRequestsPerChild1000 #每个子进程被请求服务多少次后被kill掉。0表示不限制,推荐设置为1000。
在该工作模式下,服务器启动后起动5个httpd进程(加父进程共6个,通过ps -ax|grep httpd命令可以看到)。当有用户连接时,apache会使用一个空闲进程为该连接服务,同时父进程会fork一个子进程。直到内存中的空闲进程达到MaxSpareServers。
以上是Apache的进程优化了!这个是我们Apache优化的重点。
下面我们说下隐藏版本号,控制会话连接,禁止DNS。(这些我们只要在文件末尾添加即可)
选项解释:
Timeout:设置服务器在断定请求失败前等待的秒数。默认值300。
KeepAlive:设置是否启用HTTP持久链接,On 代表打开,Off 代表关闭。如果用于同一页面包含大量静态文件的应用,设置为On,以提高性能;如果用于主要为动态页面的应用,设置为Off,以节约内存资源;如果服务器前跑有squid或者其它七层设备,设置为On。
MaxKeepAliveRequests:限制当启用KeepAlive时,每个连接允许的请求数量。如果将此值设为"0",将不限制请求的数目。个人建议将此值设为100-500之间的一个值,以确保最优的服务器性能。
KeepAliveTimeout:设置持久链接中服务器在两次请求之间等待的秒数。对于高负荷服务器来说,KeepAliveTimeout值较大会导致一些性能方面的问题:超时值越大,与空闲客户端保持连接的进程就越多。
UseCanonicalName:配置服务器如何确定它自己的域名,可选值为On | Off | DNS。DNS用于为大量基于IP的虚拟主机支持那些古老级的不提供"Host:"头的浏览器使用。笔者建议设置为Off。
AccessFileName:设置分布式配置文件的名字,默认为.htaccess。如果为某个目录启用了分布式配置文件功能,那么在向客户端返回其中的文档时,服务器将在这个文档所在的各级目录中查找此配置文件,因此会带来性能问题,个人建议关闭分布式配置文件功能。
ServerTokens:控制服务器回应给客户端的"Server:"应答头是否包含关于服务器操作系统类型和编译进的模块描述信息,同时还控制着ServerSignature指令的显示内容。可选值为Full | OS | Minor | Minimal | Major | Prod。个人建议设置为显示最少信息的Prod。
ServerSignature:配置服务器生成页面的页脚,可选值为On | Off | EMail。采用On会简单的增加一行关于服务器版本和正在伺服的虚拟主机的ServerName,而EMail设置会额外创建一个指向ServerAdmin的"mailto:"部分。建议使用默认值Off。
HostnameLookups:设置是否启用对客户端IP的DNS查找,可选值为On | Off | Double。DNS查询会造成明显的时间消耗,建议设置为Off。
大家不要忘记我们前面安装的时候,更改默认用户,这也是个优化点哦!
这样我们就算给Apache做好优化了,是不是很简单啊!大家不用记优化内容,只要记住优化点即可。