为了账号安全,请及时绑定邮箱和手机立即绑定

Linux Apache的深度优化及三种工作模式的讲解

标签:
Linux


在搭建 Apache 业务没上线之前,我们需要不断去测试性能以达到甚至远远超过预期,因此我们需要对 Apache 进行深度优化,本次我们将介绍 Apache 的优化及工作模式详解。

Apache 优化

在 Linux 中搭建的 Apache ,要进行优化必须是在编译安装环境下进行,因此我们需要对本机自带的 httpd 进行卸载。并重新下载并编译安装。要注意,在./配置的时候,要添加以下模块。

./configure \

--prefix=/usr/local/httpd \    ##安装目录

--enable-deflate \    ##压缩模块

--enable-expires \    ##缓存模块

--enable-so \

--enable-rewrite \     ##重定向模块

--enable-charset-lite \

--enable-cgi

一、配置压缩模块

打开主配置文件,打开压缩模块

vim /usr/local/httpd/conf/httpd.conf

LoadModule headers_module modules/mod_headers.so

LoadModule deflate_module modules/mod_deflate.so     //开启 去掉前面#

LoadModule filter_module modules/mod_filter.so

##在末尾添加下面的行

<IfModule mod_deflate.c>

  AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript    ##支持压缩的格式

  DeflateCompressionLevel 6    ##压缩比

  SetOutputFilter DEFLATE

</IfModule>

至此已经配置好了,我们可以使用脚本验证下语法是否存在错误,验证脚本在 /usr/local/httpd/bin/ 目录中。

[root@CentOS7-2 ~]# cd /usr/local/httpd/bin/

[root@CentOS7-2 bin]# ./apachectl -t -D DUMP_MODULES | grep "deflate"

 deflate_module (shared)

二、网页缓存模块

主配置文件中打开模块,并在末尾添加语块。

vim /usr/local/httpd/conf/httpd.conf

LoadModule expires_module modules/mod_expires.so ##开启

 ##在末尾添加下面的行

 <IfModule mod_expires.c>

  ExpiresActive On

  ExpiresDefault "access plus 50 seconds"    ##访问最大缓存时间50s

</IfModule>

查看模块是否正常开启

[root@CentOS7-2 ~]# cd /usr/local/httpd/bin/

[root@CentOS7-2 bin]# ./apachectl -t -D DUMP_MODULES | grep "expires"

expires_module (shared)

三、安全性优化

此项主要是对网络日益严重的盗链现象,防止本站点网址图片被别人盗链使用。

主配置文件修改

vim /usr/local/httpd/conf/httpd.conf

LoadModule rewrite_module modules/mod_rewrite.so   ##开启

<Directory "/usr/local/httpd/htdocs">

Options Indexes FollowSymLinks

AllowOverride None

Require all granted

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^http://localhost/.*$ [NC]

RewriteCond %{HTTP_REFERER} !^http://localhost$ [NC]

RewriteCond %{HTTP_REFERER} !^http://localhost/.*$ [NC]

RewriteCond %{HTTP_REFERER} !^http://localhost/$ [NC]

RewriteRule .*\.(gif|jpg|swf)$ http://localhost/盗链图片  ##放在网站站点目录下,盗链原图片会重定向到这张图片上

</Directory>

查看模块是否正常开启

[root@CentOS7-2 ~]# cd /usr/local/httpd/bin/

[root@CentOS7-2 bin]# ./apachectl -t -D DUMP_MODULES | grep "rewrite"

 rewrite_module (shared)

四、隐藏版本信息

打开主配置文件,开启default配置文件

vim /usr/local/httpd/conf/httpd.conf

Include conf/extra/httpd-default.conf  ##开启

vim /usr/local/httpd/conf/extra/httpd-default.conf

ServerTokens Prod            //只显示名称,没有版本

ServerSignature Off

Apache 工作模式

三种工作模式详解

我们可以通过脚本查看当前工作模式

cd /usr/local/httpd/bin/

./httpd -l

Prefork MPM : 这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器。

他的工作方式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。这个MPM具有很强的自我调节能力,只需要很少的配置指令调整。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。

Worker MPM : 此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。

    由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是,它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。每个进程可以拥有的线程数量是固定的。服务器会根据负载情况增加或减少进程数量。一个单独的控制进程(父进程)负责子进程的建立。每个子进程可以建立ThreadsPerChild数量的服务线程和一个监听线程,该监听线程监听接入请求并将其传递给服务线程处理和应答。

不管是Worker模式或是Prefork 模式,Apache总是试图保持一些备用的(spare)或者是空闲的子进程(空闲的服务线程池)用于迎接即将到来的请求。这样客户端就不需要在得到服务前等候子进程的产生。

Event MPM:以上两种稳定的MPM方式在非常繁忙的服务器应用下都有些不足。

    尽管HTTP的Keepalive方式能减少TCP连接数量和网络负载,但是 Keepalive需要和服务进程或者线程绑定,这就导致一个繁忙的服务器会耗光所有的线程。 Event MPM是解决这个问题的一种新模型,它把服务进程从连接中分离出来。在服务器处理速度很快,同时具有非常高的点击率时,可用的线程数量就是关键的资源限 制,此时Event MPM方式是最有效的。一个以Worker MPM方式工作的繁忙服务器能够承受每秒好几万次的访问量(例如在大型新闻服务站点的高峰时),而Event MPM可以用来处理更高负载。值得注意的是,Event MPM不能在安全HTTP(HTTPS)访问下工作。 

对于Event 模式,apache给出了以下警告:

This MPM is experimental, so it may or may not work as expected .

这种MPM目前处于试验状态,他可能不能按照预期的那样工作。

如何在三种模式中切换

在编译安装的配置中,指定--with-mpm=NAME 选项指定MPM,NAME就是你想使用的MPM的名称。不指定模式的话,默认为Prefork MPM。

配置模式参数

开启mpm配置文件模块

vim /etc/httpd.conf

Include conf/extra/httpd-mpm.conf

编辑配置模式参数

vim /usr/local/httpd/conf/extra/httpd-mpm.conf

<IfModule mpm_prefork_module>

    StartServers             10       # 启动时进程数

    MinSpareServers          10       # 最小空闲进程数

    MaxSpareServers         50        # 最大空闲进程数

    MaxRequestWorkers      150        #最大并发进程数

    MaxConnectionsPerChild   0        # 最大连接数限制

</IfModule>

三种配置模式的配置都是一样的,我们只需要对部分参数根据模式进行修改就可以了。

©著作权归作者所有:来自51CTO博客作者你讲多次的原创作品,如需转载,请注明出处,否则将追究法律责任

LinuxApache工作模式Web服务集群


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消