linux apache参数优化,apache2.4:参数优化(一)

-------谢谢您的参考,如有疑问,欢迎交流

一、 Apache优化:工作模式

Apache2.4版本有三个模式,prefork、worker、event,而在apache2.4版本之前没有event工作模

式,查看工作模式:httpd  -V线程与进程的区别

l进程:维护程序所需资源,不处理用户的请求

l线程:处理应用所需要完成的操作,在此也就是处理用户的请求

l一个程序至少有一个进程,一个进程至少有一个线程

l进程在执行过程中有独立的内存单元,而线程共享进程的内存单元

Prefork工作模式

lPrefork首先创建多个子进程,然后每个子进程只有一个线程,通过线程处理客户端请求,所以prefork每个进程只能处理一个请求

l优点:Prefork适用于对稳定性和效率要求较高的生产环境,因为每个线程都独享一个进程

l缺点:在处理多并发高负载时,prefork工作模式将占用大量的内存

例:配置prefork工作模式

Prefork参数配置:httpd-mpm.conf

6f0911a6f7b0fceb5f61ef015c33a9c2.png如果最大请求进程数超过256需要在MaxRequestWorkers参数前添加参数ServerLimit并且指定最大并发数,2.3.1以前的版本MaxRequestWorkers被称为MaxClients,现在依然支持这个参数。一般最大请求进程数设置为物理内存的1/2

Apache的主配置文件:httpd.conf

cd7f49bcc060d7c4e3421d88865f3e7e.png

80b4fe54f305d04ae2344d9bc768f350.png

重启apache服务,并查看工作模式

141583248cbd861389e53cd5579380d1.png

3. Worker工作模式

lWorker首先创建多个子进程,然后每个子进程创建多个线程,一个线程可以处理一个请求,所以

worker工作模式中一个子进程可以处理多个请求

l优点:适用于高并发的生产环境,因为线程是共享子进程的内存的,所以内存占用较少

l缺点:如果一个线程出现问题,也会导致同一子进程下的其他线程出现问题

例:配置worker工作模式

worker参数配置:httpd-mpm.conf

30fc902fff3b21bbae402108fae7e800.pngThreadsPerChild是worker MPM中与性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果需要设置为64以上,那就需要在这个参数前添加ThreadLimit参数,它的最大缺省值是20000

Worker的MaxRequestWorkers参数和perfork的MaxRequestWorkers参数一样,如果需要设置

为256以上,则在这个参数前还需要添加参数ServerLimit并且指定最大请求子进程数

Apache的主配置文件:httpd.conf

fac41000a7b4c2539ffab397932f790e.png

1bec0abe7a3fec8870f4bdd07b146935.png

重启httpd服务,并且查看工作模式

13d2405e66d21c902f18eb938bb3a098.png

4. Event模式

lEvent就是worker模式的变种,他解决的keep-alive长连接的时候占用线程资源被浪费的问题,

在event模式中会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时

候,将请求传递给服务器的线程,执行完毕后,又允许它释放。这增强了在高并发场景下的请求处

理。

l缺点:event模式不能很好的支持https的访问(HTTP认证相关的问题)。

二、Apache优化:配置参数

8d04e94b4396c7feb759cdd3c74405f4.png

三、 Apache优化:开启Gzip压缩传输Gzip的模版名叫mod_deflate,使用此功能必须安装此模版

Gzip压缩可以将响应的数据压缩,以降低带宽占用,比如一个100KB的文件压缩成10KB进行传输

设置压缩比率,取值范围在 1(最低) 到 9(最高)之间,不建议设置太高,虽然有很高的压缩率,但是占用更多的CPU资源

未使用Gzip压缩时

43d9551d735c6f608546670aed52b9e1.png

使用Gzip压缩后

b1a0418f0bbd75b4e842580526eaae7a.png

压缩传输需要的模版:mod_deflate.so和mod_headers.so

78faad7e6f96a2016a773647541d601f.png安装压缩传输需要的模版

l可以使用DSO方式安装,上面已经讲解过安装方法,这里不再复述

l在生产环境中,因为是动态安装的模版,安装模版后,最好使用httpd的优雅启动去重新加载配置,这样不会影响httpd服务的运行

dfb1ebfc9f5fbb93c4fc70d49b6f29b0.png

2. 修改httpd.conf配置文件

启用deflate和headers模版

为了方便调用libz.so

执行命令:ln -s  /usr/local/zlib/lib/libz.so  /usr/lib/

b4fb78f531d2277b2e032a7ebd4dcdf2.png

添加压缩传输的相关代码

d4b1f240f15811c99d9014947d64cf61.png

还可以设置日志输出:就是将输入输出的流量记录到日志(生产环境一般不用)

043d4f4191aa860ff2d76c8db534f4fc.png

重启httpd服务

fff9e69c23196ef7d078c7e3dc3a46de.png

3. 测试

首先在存放网页的目录下创建两个文件,一个.png文件(不进行压缩传输),一个.php文件(进行

传输压缩)

本例使用的是QQ浏览器

首先访问png结尾的图片

d28b8a65ee0f7b2ae7dcf790902b92d2.png

访问php网页

12282d4633f8ec39a43bf63e9d4c9630.png

通过查看日志验证

cbd2c3105988bb57f2044ca4c5932b5a.png

四、 Apache优化:expires缓存

Mod_expires模块可以通过在客户机上缓存,减少20%-30%左右的重复请求

1. 首先查看未启用时的应答报文

8f00ddf4a7b13de9c93193c36223e004.png

2. 启用expires模块

修改httpd.conf配置文件,启用expires模版。并且添加expires配置规则

4629b835abdd308644e44640594b53e9.png

29f35b30d571f42878417e39279425ae.png

ExpiresByType命令格式:

ExpiresByType   type/encoding  "   [plus]  {}"

解释:type/encoding:类型/编码

:指定缓存时间以什么为起点,access和now是以客户机的访问时间为起点,modification是以此文件的修改时间为起点

Plus:关键字,可选:指定缓存时长,必须是整数:缓存时长的单位,常用有month(月)、weeks(周)、days(天)、hours(小时)、minutes(分钟)、seconds(秒)、years(年)

Access可以写为A时间长可以以秒计并且不添加时长单位,如:ExpiresByType    image/gif   A2592000

3. 重启httpd服务,并且进行验证

234a97c41ab29c14ed4ea7106ab242b4.png

通过curl命令获取响应头部

a848e54ab179c533b28aff58c05447bb.png

五、 apache优化:禁止目录遍历

当找不当某个web服务器的页面时,浏览器将会遍历整个web目录,并且显示,这样是极不安全的

没有禁止遍历目录前

db721464371cc158e7c7af6423766e6f.png

5eb50cf7ee63eb0526d5679cc16f5ebf.png

1. 修改httpd主配置文件,禁止目录遍历

74d1e0d2e777ee873bcbdbe919a9cc36.png

2. 重启服务,并且进行测试

5f5d5ba9e2b1d63c0b84ed99a6d13e5f.png

2195dd32d1e72530eb97f32b1adeacb1.png

六、 Apache优化:在应答首部中隐藏版本信息

未隐藏前

75ad655076213b84f9026cdf35d2e539.png

在应答报文中包含程序名及其版本号,是极不安全的,这很有可能成为***者的一个机会

1. 隐藏版本号

当apache安装后,就只能隐藏版本号了,程序名是隐藏不了的

现在我们隐藏版本号

首先修改模版文件:htttpd-default.conf文件

e7e97287ea3597898667f51d559e8dad.png

然后修改httpd.conf配置文件

ed6c7cf8083f63780b2a002c17498c43.png

重启httpd服务,使配置生效

a87131bde81cdd70b248cf8fdad8bd34.png

然后再次查看相应报文,发现server只标识了程序名,版本号被隐藏

1903cbf093c79cc87bff8ae570268670.png

2. 自定义程序名和版本号

必须在编译安装apache前,通过修改源码文件,才能实现隐藏程序名

首先修改源码包include目录下的ap_release.h文件

c44552b2517e7cbee6a9bc5a6188d4fd.png

将这些值修改为自己想要的值,然后再编译安装,应答报文里面的程序名及其版本号就彻底改

变了

我将这些值修改为:

0e530106123a112dac4b1328a4d4981d.png

然后编译安装,访问web服务器,发现响应报文不再显示真正的程序名和版本号

a94215de157f4659f2a19415052620b1.png

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值