Linux Apache的深度优化及三种工作模式的讲解
在搭建 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 FollowSymLinksAllowOverride 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>
三种配置模式的配置都是一样的,我们只需要对部分参数根据模式进行修改就可以了。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
记一次PHP优化案例
记一次php优化案例 网站架构简介: 现在很多的企业都是使用lnmp或者lamp来做企业的网站服务器架构,这两种网站的服务架构,我们都是比较熟悉的;基于nginx的性能优于Apache,现阶段的很多公司,都是逐渐把Apache替换成nginx,毕竟nginx的自带的高可用配置,反向代理等等功能相当突出。 Lnmp网站服务器架构,其实就是linx+nginx+mysql+php架构体系,架构安装我就不多说了。接下来我们来谈谈,我遇到案例吧 案例: 有一天,后台的同事,说后台访问很慢,而且有时候出现502错误。然后反馈给技术上级,接着又找到我处理一下(那时在喝着茶),然后我知道又有事干了。 分析: 然后我直接找到那个同事,问问是不是网络原因啊,我也叫其他的同事,访问一下,还是出现访问忙的问题。这时我就知道事情没那么简单了。公司应用的是lnmp网站服务器架构,以前没有做太多的优化,接下来我们需要优化网站的服务架构了 一、案例分析。 我们可以想到,既然是访问缓慢,有时候直接访问不了,以前是没问题的,到现在就突然出现了问题,那必定是我们的nginx与php响应不过来导致的,原因可能是其他...
-
下一篇
eNSP 华为模拟器拓扑图搭建,静态路由设置,远程登录设置
上一篇跟大家介绍了一篇思科设备的静态路由和远程登录此篇就跟大家介绍华为设备的操作吧 eNSP软件去华为官网下载,免费的,这里就不提供下载链接了【思科终究是会被挤出中国市场的将来是华为的市场,多练练华为设备吧】 (心得分享:模拟器终究只是软件,不同于真实设备的稳定,会出不少问题,最常见的就是报错信息了,这里建议那些不太懂调试的人,如果系统盘空间充足的话,不妨把软件安装到C盘里面,能解决不少问题,软件并不大不会占用多少内存空间)华为设备只有两种视图模式:一种是用户视图<Huawei>一种是系统视图[Huawei]基本操作命令:system-view (从用户视图进入系统视图)quit (一步一步的退出当前模式)Ctrl+z (直接退回到用户模式 ) 正篇内容:打开模拟器软件,如图所示摆好三个AR2220(常用的设备)的路由器配置好地址和线路。配置完毕后进入设备界面配置IP地址配置完毕后再配置静态路由跨网段联通配置完静态路由后,检测设备之间是否联通使用ping命令,直接Ping目标IP如果不通就回去仔细检查接口配置是否配错,可输入查询命令查询:display ip routing...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker容器配置,解决镜像无法拉取问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- 2048小游戏-低调大师作品
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- MySQL数据库在高并发下的优化方案