Apache依然是世界上最受欢迎的Web服务器,这一方面归功于数量众多的功能强大的模块,它们可以协同运行,增强这款Web服务器的核心功能。本文介绍了一些实用的Apache模块,它们可以为你的Web服务器改善性能、内容分发和总体安全。
改善性能的模块
虽然最新版本的Apache本身运行良好,但是你可以通过部署诸多模块——这些模块可压缩输出、消除不必要的载荷以及优化HTML和CSS代码,优化这款Web服务器,从而减少耗用资源、改进内容分发。
默认情况下,在CentOS中,Apache在预派生(prefork)模式下运行其多路处理模块(MPM);在这种模式下,父进程负责派生足够多的子进程,以满足所有远程客户端试图访问服务器的要求。不过,按照客户端的需要动态管理进程不是非常高效,那是由于每次开始和终止操作很花时间和资源。ModPrefork解决了这个不足,它让你可以为等待客户端请求的备用Apache子实例配置最小(和最大)数量。 不过,这项功能不够灵活和敏捷,无法满足请求偶尔出现峰值的繁忙网站的需要。
ModWorker解决了ModPrefork的性能问题,它使用线程来满足大量请求的需要,耗用的系统资源比较少。想在CentOS下启用ModWorker,编辑文件/etc/sysconfig/httpd,去掉HTTPD=/usr/sbin/httpd.worker这一行的注释。然后运行命令service httpd restart,重启Apache。想确认Apache在什么模式下运行,请使用命令apachectl –l,列出Apache所有已装入模块、寻找worker.c。
遗憾的是,ModWorker并非与所有Apache模块兼容,包括诸如ModPHP之类的常见模块。在启用它之前,你应该检查兼容性,需要的话还要另辟蹊径。比如说,要是你同时需要ModWorker和PHP,就可以使用Mod_FastCGI代替ModPHP。
借助ModPagespeed优化内容
一旦你优化了Apache的服务器端,就可以开始改进内容分发了。ModPagespeed(http://code.google.com/p/modpagespeed/)是由谷歌开发的第三方、一体化的优化模块,它使用ModDeflate来改写和压缩输出,从而提供一种更快速的客户端体验。它会自动运用来自PageSpeed(https://developers.google.com/speed/pagespeed/)的运用最佳实践,PageSpeed是可以用来优化网页性能的一套工具。虽然ModPagespeed仍正式处于测试版状态,但它是个成熟的项目。如果使用ModPagespeed,你就可以避免迫使开发人员和设计人员手工优化HTML、CSS和JavaScript代码以及图像。查看该模块的功能页面(http://www.modpagespeed.com/),即可了解更多信息和有用的比较。
你可以从源文件或通过二进制程序包来安装ModPagespeed。至于CentOS,你可以使用来自ModPagespeed下载页面(https://developers.google.com/speed/pagespeed/)的官方安装程序包。一旦你下载了与你的CentOS架构(32位或64位)对应的程序包,运行命令rpm -ivh mod-pagespeed*.rpm来安装它。重启Apache,并运行命令apachectl -t -D DUMP_MODULES,确保ModPagespeed已安装和装入。在这个命令的输出中,你应该能在所列的模块当中找到pagespeed_module。
接下来,打开配置文件/etc/httpd/conf.d/pagespeed.conf,检查所有的可用选项。在Allow from 127.0.0.1后面添加新的一行,让你的本地客户端IP地址出现在命令中;比如说,如果你的IP地址是192.168.0.2,就添加Allow from 192.168.0.2。一旦你重新装入Apache,就能够在http://yourserverip/mod_pagespeed_statistics处看到ModPagespeed的统计信息。这让你可以更快速地了解它,看到优化后的结果。
#p# 借助ModSecurity确保绝对安全
ModSecurity是面向Apache的最受欢迎的安全模块。我们之前写过一篇文章,题为《借助ModSecurity保护和审查你的Web服务器》(http://olex.openlogic.com/wazi/2011/protect-and-audit-your-web-server-with-apaches-modsecurity/),对它已作了介绍,所以我们这里只表示它可以提供全面的Web流量检查、封阻和审查功能,让你可以保护Web服务器,远离已知和未知的安全漏洞,包括分布式拒绝服务(DDOS)攻击。
借助ModGeoIP检测访客的所在国家
ModGeoIP基于MaxMind的GeoIP数据和技术(http://www.maxmind.com/app/ip-location),它让你只要使用本地保存的GeoIP数据库,就可以确定访客的所在国家。一旦你知道了访客的所在国家,就能处理一些事务,比如把他重定向至某个特定的网页或者拒绝对方访问。
想安装ModGeoIP,你首先需要C库和程序包zlib-devel,这是前提条件。下载GeoIP C库的最新版本(http://www.maxmind.com/download/geoip/api/c/),对它进行抽取,然后执行通常的安装步骤,执行./configure && make && make install。
接下来,安装ModGeoIP本身。下载最新版本,对它进行抽取,然后执行apxs -i -a -L/usr/local/lib -I/usr/local/include -lGeoIP -c mod_geoip.c。apxs命令的变量意味着,把该模块安装到默认模块目录/usr/lib/httpd/modules/,借助LoadModule命令把它装入到Apache以此来激活它,使用/usr/local/lib里面的库,加入/usr/local/include目录,搜索库GeoIP,然后通过C源文件来进行编译。
一旦你重启Apache后,ModGeoIP模块应该列在命令apachectl -t -D DUMP_MODULES的输出中。想启用它,创建一个文件/etc/httpd/conf.d/geoip.conf,把在整个服务器范围内启用该模块的命令以及含有GeoIP数据库的二进制文件路径放到它里面:
GeoIPEnable On
GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat
随后,你可以开始根据Apache目录或虚拟主机配置来使用ModGeoIP,或者借助本地.htaccess文件。配置选项一样。比如说,如果你想拒绝来自美国境外的任何访客访问:
SetEnvIf GEOIP_COUNTRY_CODE US AllowCountry
Deny from all
Allow from env=AllowCountry
想了解更多例子和信息,请参阅ModGeoIP的主页(http://www.maxmind.com/app/mod_geoip)。
借助ModStatus进行监控
你应该总是监控Apache或任何服务,以确保性能最佳。Apache的ModStatus模块为你提供了关于当前服务器运行状况的信息。
ModStatus默认情况下安装在CentOS中,但并未被启用。想启用它,打开Apache的主配置文件/etc/httpd/conf/httpd.conf,去掉下面代码的注释,把your_ip换成你的IP:
SetHandler server-status
Order deny,allow
Deny from all
Allow from your_ip
此外,去掉ExtendedStatus On的注释,那样你就能看到更多信息,比如当前请求访问的URL。重新装入Apache,试试访问http://yourserver/server-status,证实ModStatus在正常运行。在刚打开的页面上,你应该能够看到与Apacehe及其进程(分支进程或线程)和处理器使用情况有关的所有统计信息。
如果你在其URL:http://yourserver/server-status?auto的末尾加上?auto,ModStatus还能得出机器可读的输出。然后,其他程序就能阅读和分析输出。自动模式数据被Cacti用来以实用趋势绘制图形,以及被Nagios用来监控有无异常问题。
#p# 借助ModSpamhaus进行保护
某些IP地址已知受到了危及,已知发送垃圾邮件或被用于DDOS攻击及其他恶意活动。Spamhaus项目是核查IP地址声誉的最佳公共来源。人们通常认为Spamhaus是一个与邮件服务器有关的项目,但由于需要类似的Web服务器保护机制,结果促使有人为Apache开发了ModSpamhaus,这个扩展模块让系统管理员可以阻止有人通过声名狼藉的IP地址进行访问。
想安装ModSpamhaus,先下载最新的安装程序包(http://sourceforge.net/projects/mod-spamhaus/files/latest/download),对它进行抽取。找到src目录中的文件mod_spamhaus.c,执行命令apxs -i -a -c mod_spamhaus.c,手动创建这个Apache模块。变量告诉apxs将该模块安装到默认的模块目录usr/lib/httpd/modules/中,使用LoadModule命令把它装入到Apache来激活它,并通过C源文件来进行编译。
接下来,创建ModSpamhaus的配置文件/etc/httpd/conf.d/spamhaus.conf。填入下列配置选项:
MS_METHODS POST,PUT,OPTIONS,CONNECT
MS_WhiteList /etc/spamhaus_whitelisted
MS_CacheSize 1000
就大多数架构而言,这个普通的配置可以被接受。MS_METHODS选项定义了应该检查哪些HTTP方法:POST、PUT、OPTIONS和CONNECT。如果你在防范DDOS攻击或你的Web表单使用GET方法,还要添加GET。选项MS_WhiteList让你可以用加入白名单的IP地址来指定文件;也就是说,不管声誉好坏,这些地址都将被允许访问。MS_CacheSize指定了关于多少个IP地址应该缓存起来的信息。遭到比较严重的DDOS攻击时,你可以加大这个数,阻止数量更多的重复性的恶意IP地址。
使用ModSpamhaus可能会导致你的网站性能下降,如果你启用它来检查GET等更常使用的HTTP方法,更是如此。为了解决这个问题,你可以安装自己的rbldnsd(DNS守护程序,适合运行基于DNS的阻止列表),并使用ModSpamhaus选项MS_DNS来指定其地址。拥有自己的rbldnsd让你可以使用本地数据库、定期拷贝远程数据库,从而优化性能。
所有上述模块仅仅是数百个Apache扩展模块中的少数几个,代表了旨在改善Apache Web服务器功能的模块。
小知识:APache eXtenSion工具
不是所有的Apache模块都是以预编译程序包的形式出现的。当你遇到不是预编译程序包的模块时,可以借助由CentOS程序包httpd-devel提供的APache eXtenSion(apxs)工具,从源文件来安装它。Apxs通过三种类型的文件:C语言源文件(.c)、对象文件(.o)和库归档文件(.a),创建Apache模块,作为动态共享对象(DSO)。DSO文件通过mod_so模块,在运行过程中装入到Apache。通过运行apachectl -l,核实一下你的Apache是不是安装了mod_so,寻找输出当中的mod_so.c。
原文链接: http://olex.openlogic.com/wazi/2012/add-these-modules-to-enhance-apache-web-server/