Apache多路处理模块(MPM)与rewrite规则

it2022-05-07  31

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表示引用(.*)中的任意内容

转载于:https://www.cnblogs.com/longBlogs/p/9613562.html


最新回复(0)