下一页 上一页 目录

11. 优化设置

如果服务器访问量过大,将会导致页面打开迟缓,下载速度也降低,如果由于经费和环境问题,集群方案没有得以应用。可以通过对Apache2增加模块MPM来进行优化, 这里我们选择线程型MPM - worker 加以介绍

11.1 worker的工作原理

worker是2.0 版中全新的支持多线程和多进程混合模型的MPM。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是, worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性。这种MPM的工作方式将是Apache 2.0的发展趋势。

worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild 线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients设置了所有子进程中的线程总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。。 系统默认已经启用了 worker mpm 模块这可以通过以下命令查看:

# apache2 -l
Compiled in modules:
  core.c
  mod_access.c
  mod_auth.c
  mod_log_config.c
  mod_logio.c
  mod_env.c
  mod_setenvif.c
  worker.c
  http_core.c
  mod_mime.c
  mod_status.c
  mod_autoindex.c
  mod_negotiation.c
  mod_dir.c
  mod_alias.c
  mod_so.c

一个典型的针对workerMPM的配置如下:

ServerLimit 16  //服务器允许配置的进程数上限, Apache在编译时内部有一个硬限制"ServerLimit 20000"。你不能超越这个限制。
StartServers 2  //设置了服务器启动时建立的子进程数量, 默认值是"3"。
MaxClients 150  //设置了允许同时伺服的最大接入请求数量。任何超过MaxClients限制的请求都将进入等候队列
MinSpareThreads 25   //设置最小空闲线程数,用于处理可能到来的突发请求。默认值是"75"。
MaxSpareThreads 75  //设置最大空闲线程数。不同的MPM对这个指令的处理是不一样的:默认值是"250"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太多,子进程将杀死多余的空闲线程。
ThreadsPerChild 25 //设置了每个子进程建立的线程数。子进程在启动时建立这些线程后就不再建立新的线程了。默认值是25

11.2 使用第三方模块增强安全性

mod-security apache的一个模块,有请求过滤,日志审计等功能,可以防止SQL Injection,跨站脚本攻击.

详细信息请参阅 http://www.modsecurity.org/projects/modsecurity/apache/index.html

首先安装libapache2-mod-security包

$ sudo apt-get install libapache2-mod-security

将会安装libapache2-mod-security, mod-security-common

启用该模块

$ sudo cp /usr/share/doc/libapache2-mod-security/examples/httpd2.conf.example-full /etc/apache2/mods-available/mod-security.conf
$ sudo a2enmod mod-security

修改配置文件, 相关内容如下

==== mod-security.conf 文件内容开始====

# 检测内容长度以避免堆溢出攻击
SecFilterForceByteRange 32 254 =>SecFilterForceByteRange 32 126

# debug设置
SecFilterDebugLevel 9 =>SecFilterDebugLevel 0

# 设置缺省的动作
SecFilterDefaultAction "deny,log,status:499" =>SecFilterDefaultAction "deny,log,status:404"

# 把设置传递给子目录
SecFilterInheritance Off

# Redirect user on filter match
# 当匹配sh的时候,重新定向到一个特殊的警告页面,该页面是自行编写的,写些警告的话让攻击者知难而退,该段先不要生效,等到相关配置配好之后再失效不迟。记住在配好之后要使之生效。
#SecFilter sh redirect:http://localhost/hack/warning.htm

# Prevent OS specific keywords
#过滤一些敏感的东西,我们使用*是为了攻击者使用/etc/./passwd来绕开检测
SecFilter /etc/passwd =>SecFilter /etc/*passwd
SecFilter /bin/*sh

# Very crude filters to prevent SQL injection attacks
# 防止SQL插入(SQL Injection)攻击
SecFilter "delete[[:space:]]+from"
SecFilter "insert[[:space:]]+into"
SecFilter "select.+from"
SecFilter "select[[:space:]]+from"
SecFilter "union[[:space:]]+from"
==== mod-security.conf 文件内容结束====

重启apache2 服务即可.

$ sudo /etc/init.d/apache2 start

备注:第三步可能会引起部分网站不能正常运行,可以参照着去掉某些限制,由于是安全模块,所以参照的是防火墙的做法,关掉一切不安全的,再根据需要打开必要的。

摘自: http://wiki.ubuntu.org.cn http://wiki.ubuntu.org.cn/Apache安装设置


下一页 上一页 目录