1 多路处理模块(multi-processing modules,MPM)
Apache Web使用多路处理模块,有三种处理模块:Prefork MPM、Worker MPM、Event MPM。Apache最常用的处理模块为Prefork MPM和Worker MPM(Apache默认使用Prefork MPM方式);Event MPM不支持HTTPS方式,官网也给出“This MPM is experimental,so it may or may not work as expected”,所以Event MPM很少被使用
2 Prefork MPM工作原理
- Prefork采用的预派生子进程方式,用单独的子进程来处理不同的请求,进程之间是彼此独立的,所以比较稳定。
- 工作原理:控制进程Master在最初建立“StartServers”个进程后,为了满足MinSpareServers设置的最小空闲进程,所以需创建第一个空闲进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个,依次按照递增指数级创建进程数,最多每秒同时创建32个空闲进程,直到满足至少有MinSpareServers设置的值为止
- Apache的预派生模式(Prefork),基于预派生模式不必在请求到来时再产生新的进程,从而减少了系统开销以增加性能,不过由于Prefork MPM引擎是基于多进程方式提供对外服务,每个进程占用内存也相对较高
3 Worker MPM工作原理
- Worker方式是2.0版中全新的支持多线程和多进程混合模型的MPM,由于使用线程来处理,所以可以处理海量的HTTP请求,而系统资源的开销要小于基于Prefork多进程的方式。Worker也是基于多进程,但每个进程又生成多个线程,这样可以保证多线程可以获得进程的稳定性
- 工作原理:控制进程Master在最初建立“StartServers”个进程,每个进程会创建ThreadsPerChild设置的线程数,多个线程共享该进程内存空间,同时每个线程独立地处理用户的HTTP请求。为了不在请求到来时再生线程,Worker MPM也可以设置最大最小空闲线程
- 同时处理的请求总数(MaxClients)=进程总数*ThreadsPerChild,最大进程数不能超过ServerLimit数,如果需调整的StartServer进程数,需同时调整ServerLimit值
4 Prefork MPM与Worker MPM引擎区别
- Prefork MPM模式:使用多个进程,每个进程只有一个线程,每个进程在某个确定的时间只能维持一个连接,优点是稳定,但内存开销较高
- Worker MPM模式:使用多个进程,每个进程包含多个线程,每个线程在某个确定的时间只能维持一个连接,内存占用量比较小,适合大并发、高流量的Web服务器。缺点是一个线程崩溃,整个进程就会连同其任何线程一起挂掉
5 Apache rewrite规则
rewrite规则也称为规则重写,主要功能是实现浏览器访问HTTP URL的跳转
1) 主要用途:
- 对搜索引擎优化(search engine optimization,SEO)友好,利于搜索引擎抓取网站页面
- 隐藏网站URL真实地址,浏览器显示更加美观
- 网站变更升级,可以基于rewrite临时重定向到其他页面
2) Apache rewrite规则三个概念(rewrite结尾标识符、rewrite规则常用表达式、Apache rewrite变量)
- Apache rewrite结尾标识符:用于规则末尾,表示规则的执行属性
R[=code](force redirect):强制外部重定向
G(force URL to be gone):强制URL为gone,返回410HTTP状态码
P(force proxy):强制使用代理转发
L(last rule):匹配当前规则为最后一条匹配规则,停止匹配后续规则
N(next round):重新从第一条规则开始匹配
C(chained with next rule):与下一条规则关联
T=MIMI-type(force MIME type):强制MIME类型
NC(no case):不区分大小写
- Apache rewrite规则常用表达式:主要用于匹配参数、字符串及过滤设置
. 匹配任何单字符
[word] 匹配字符串word
[^word] 不匹配字符串word
abc|abcd 可选择字符串abc|abcd
? 匹配0到1个字符
* 匹配0到多个字符
+ 匹配1到多个字符
^ 字符串开始的标志
$ 字符串结束的标志
\n 转义符标志
- Apache rewirte变量:常用于匹配HTTP请求头信息、浏览器主机名、URL等
代码:
HTTP headers:HTTP_USER_AGENT,HTTP_REFERER,HTTP_COOKIE,HTTP_HOST,HTTP_ACCEPT;
connection&request:REMOTE_ADDR,QUERY_STRING;
server internals:DOCUMENT_ROOT,SERVER_PORT,SERVER_PROTOCOL;
system stuff:TIME_YEAR,TIME_MON,TIME_DAY
详解:
HTTP_USER_AGENT:用户使用的代理,例如浏览器
HTTP_REFERER:告知服务器,从哪个页面来访问的
HTTP_COOKIE:客户端缓存,主要用于存储用户名和密码等信息
HTTP_HOST:匹配服务器ServerName域名
HTTP_ACCEPT:客户端的浏览器支持的MIME类型
REMOTE_ADDR:客户端的IP地址
QUERY_STRING:URL中访问的字符串
DOCUMENT_ROOT:服务器发布目录
SERVER_PORT:服务器端口
SERVER_PROTOCOL:服务器端协议
TIME_YEAR:年
TIME_MON:月
TIME_DAY:日
3) rewrite规则实战案例,以下配置均配置在httpd.conf中
- 将example.com跳转至www.example.com
RewriteEngine on : 启用rewrite引擎
RewriteCond %{HTTP_HOST} ^example.com [NC] : 声明client请求的主机匹配以examole.com开头的域名,NC忽略大小写
RewriteRule ^/(.*)$ http://www.example.com/$1 [L] : ^/表示RewriteCond中匹配的内容,(.*)表示任意字符串,$1表示引用(.*)中的任意内容