linux服务器系统:Linux Apache服务器系统的设置和优化

  Apache服务器设置文件位于/usr/local/apache/conf/目录下传统上使用 3个配置文件httpd.conf, access.conf和srm.conf来配置Apache服务器行为 httpd.conf提供了最基本服务器配置是对守护 httpd如何运行技术描述;srm.conf是服务器资源映射文件告诉服务器各种文件MIME类型以及如何支持这些文件; access.conf用于配置服务器访问权限控制区别用户和计算机访问限制;这 3个配置文件控制着服务器各个方面特性因此为了正常运行服务器便需要设置好这 3个文件

  除了这 3个设置文件的外Apache还使用mime.types文件用于标识区别文件对应MIME类型 magic文件设置区别MIME类型文件些特殊标识使得Apache 服务器从文档后缀不能判断出文件MIME 类型时能通过文件内容中这些特殊标记来判断文档MIME类型

  [iaspec@www conf]$ pwd

  /usr/local/apache/conf

  [iaspec@www conf]$ ls

  access.conf httpd.conf.OLD magic.default srm.conf

  access.conf.default httpd.conf.SAVE mime.types srm.conf.default

  httpd.conf magic mime.types.default

  新版本Apache将原来httpd.conf、srm.conf和access.conf中所有配置参数均放在了个配置文件 httpd.conf中只是为了和以前版本兼容原因(使用这 3个设置文件方式来源于NCSA-httpd)才使用 3个配置文件而提供 access.conf和srm.conf文件中没有具体设置

  由于在新版本Apache中所有设置都被放在了httpd.conf中因此只需要调整这个文件中设置本文基于redhat 7.2 下httpd.conf为例解释Apache服务器各个设置选项当然其配置思路方法可扩展到几乎所有unix系统

  虽然Apache提供设置参数很多基本上这些 参数都很明确也可以不加改动运行Apache服务器但如果需要调整Apache服务器性能以及增加对某种特性支持就需要了解这些设置参数含义

  需要指出除了操作系统性能调整的外Apache 服务器本身缺省配置绝不是最优化和最高效而是要适应几乎所有种类操作系统、所有种类硬件下设置多平台软件Software不可能为特定平台和特定硬件提供最优化缺省配置因此要使用Apache时候性能调整是必不可少

  本文目录快速访问:

  httpd.conf基本配置和性能优化关系

  另外些加速思路方法

  附录、采用 mod_gzip 加速Apache

  httpd.conf基本配置和性能优化关系

  httpd.conf中首先定义了些httpd守护进程运行时需要参数来决定其运行方式和运行环境 下面就httpd.conf中配置参数定义及其各种配置、优化思路方法进行逐项介绍说明:

  (优化没有捷径必须首先清楚各配置含义)

  ServerType standalone

  ServerType定义服务器启动方式缺省值为独立方式standalonehttpd 服务器将由其本身启动并驻留在主机中监视连接请求在Linux下将在启动文件 /etc/rc.d/rc.local/init.d/apache中自动启动Web服务器这种方式是推荐设置

  启动Apache服务器种方式是inet方式使用超级服务器inetd监视连接请求并启动服务器当需要使用inetd启动方式时便需要更改为这个设置并屏蔽/etc/rc.d/rc.local/init.d/apache文件以及更改/etc/inetd.conf并重起 inetd那么Apache就能从inetd中启动了

  两种方式区别是独立方式是由服务器自身管理自己启动进程这样在启动时能立即启动服务器多个副本每个副本都驻留在内存中有连接请求不需要生成子进程就可以立即进行处理对于客户浏览器请求反应更快性能较高而 inetd方式要由inetd发现有连接请求后才去启动http服务器由于inetd 要监听太多端口因此反应较慢、效率较低但节约了没有连接请求时Web服务器占用资源因此inetd方式只用于偶尔被访问并且不要求访问速度服务器上事实上inetd方式不适合http突发和多连接特性个页面可能包含多个图象而每个图象都会引起个连接请求即使虽然访问人数造成教少但瞬间连接请求并不少这就受到inetd性能限制甚至会影响由inetd启动其他服务器

  ServerRoot "/usr/local"

  ServerRoot用于指定守护进程httpd运行目录httpd在启动的后将自动将进程当前目录改变为这个目录因此如果设置文件中指定文件或目录是相对路径那么真实路径就位于这个ServerRoot定义路径的下

  由于httpd会经常进行并发文件操作就需要使用加锁方式来保证文件操作不冲突由于NFS文件系统在文件加锁方面能力有限因此这个目录应该是本地磁盘文件系统而不应该使用NFS文件系统

  # LockFile /var/lock/httpd.lock

  LockFile参数指定了httpd守护进程加锁文件般不需要设置这个参数 Apache服务器将自动在ServerRoot下面路径中进行操作但如果ServerRoot为NFS文件系统便需要使用这个参数指定本地文件系统中路径以提高读写速度

  PidFile /var/run/httpd.pid

  PidFile指定文件将记录httpd守护进程进程号由于httpd能自动复制其自身因此系统中有多个httpd进程但只有个进程为最初启动进程它为其他进程父进程对这个进程发送信号将影响所有httpd进程PidFILE定义文件中就记录httpd父进程进程号

  ScoreBoardFile /var/run/httpd.scoreboard

  httpd使用ScoreBoardFile来维护进程内部数据因此通常不需要改变这个参数除非管理员想在台计算机上运行几个Apache服务器这时每个Apache服务器都需要独立设置文件htt pd.conf并使用区别ScoreBoardFile

  #ResourceConfig conf/srm.conf

  #AccessConfig conf/access.conf

  这两个参数ResourceConfig和AccessConfig就用于和使用 srm.conf 和 access.conf 设置文件老版本Apache兼容如果没有兼容需要可以将对应设置文件指定为/dev/null这将表示不存在其他设置文件而仅使用 httpd.conf 个文件来保存所有设置选项

  Timeout 300

  Timeout定义客户和服务器连接超时间隔超过这个时间间隔(秒)后服务器将断开和客户机连接如果服务器负载较重可适当把此数字调小

  KeepAlive On

  在HTTP 1.0中次连接只能作传输次HTTP请求而KeepAlive参数用于支持HTTP次连接、多次传输功能这样就可以在次连接中传递多个HTTP请求

  MaxKeepAliveRequests 100

  MaxKeepAliveRequests为次连接可以进行HTTP请求最大请求次数将其值设为0将支持在次连接内进行无限次传输请求事实上没有客户次连接中请求太多页面通常达不到这个上限就完成连接了 可以适当将此数字调小以获取最大速度

  KeepAliveTimeout 15

  KeepAliveTimeout测试次连接中多次请求传输的间时间如果服务器已经完成了次请求直没有接收到客户次请求在间隔超过了这个参数设置值的后服务器就断开连接可以适当调小这个数值以尽快释放空闲连接但也不可太小不然多数客户都要重新连接将耗费 CPU时间

  MinSpareServers 5

  MaxSpareServers 10

  在使用子进程处理HTTP请求Web服务器上由于要首先生成子进程才能处理客户请求因此反应时间就有点延迟但是Apache服务器使用了个特殊技术来摆脱这个问题这就是预先生成多个空余子进程驻留在系统中旦有请求出现就立即使用这些空余子进程进行处理这样就不存在生成子进程造成延迟了在运行中随着客户请求增多启动子进程会随的增多但这些服务器副本在处理完次HTTP请求的后并不立即退出而是停留在计算机中等待下次请求但是空余子进程副本不能光增加不减少太多空余子进程没有处理任务也占用服务器处理能力因此也要限制空余副本数量使其保持个合适数量使得既能及时回应客户请求又能减少不必要进程数量

  因此就可以使用参数MinSpareServers来设置最少空余子进程数量 以及使用参数MaxSpareServers 来限制最多空闲子进程数量多余服务器进程副本就会退出根据服务器实际情况来进行设置如果服务器性能较高并且也被频繁访问就应该增大这两个参数设置对于高负载专业网站WebSite这两个值应该大致相同并且等同于系统支持最多服务器副本数量也减少不必要副本退出

  比如当系统高负载时可以这样检测:

  [iaspec@www iaspec]$ ps -ef|grep apache|wc

  55 .. ..

  [iaspec@www iaspec]$

  这表明高负载时有55个运行子进程如果此服务器为WEB专用服务器就应该考虑将这两个数值分别设为50、60或者40、70具体以速度测试结果为准

  StartServers 5

  StartServers参数就是用来设置httpd启动时启动子进程副本数量这个参数和上面定义MinSpareServers和 MaxSpareServers参数相关都是用于启动空闲子进程以提高服务器反应速度这个参数应该设置为前两个值的间个数值小于 MinSpareServers和大于MaxSpareServers都没有意义

  MaxClients 150

  在另方面服务器能力毕竟是有限不可能同时处理无限多连接请求因此参数Maxclients就用于规定服务器支持最多并发访问客户数如果这个值设置得过大系统在繁忙时不得不在过多进程的间进行切换来为太多客户进行服务这样对每个客户反应就会减慢并降低了整体效率如果这个值设置较小那么系统繁忙时就会拒绝些客户连接请求当服务器性能较高时就可以适当增加这个值设置对于专业网站WebSite应该使用提高服务器效率策略因此这个参数不能超过硬件本身限制如果频繁出现拒绝访问现象就介绍说明需要升级服务器硬件了当不太在意对客户浏览器反应速度或者认为反应速度较慢也比拒绝连接好就也可以略微超过硬件条件来设置这个参数

  但具体这个数值以多少为宜呢?当对性能要求较高时可以用下面思路方法确定如何配置此参数

  首先估计你最大可能并发连接数或者在高负载时用ps -ef|grep apache|wc命令测得最大进程数通常MaxClients应该是这个数值两倍左右如果当前网站WebSite在高负载时访问速度可以接受但有拒绝服务现象则应把此参数调大如果无拒绝服务现象但访问速度缓慢则应减低此数值

  这个参数同时限制了MinSpareServers和MaxSpareServers设置它们不应该大于这个参数设置

  对于重负载机器来说仅仅这么做还是不够

  Apache允许为请求开最大进程数是256,MaxClients限制是256.如果用户多了用户就只能看到Waiting for reply....然后等到下个可用进程出现这个最大数是Apache决定--它NT版可以有1024但Unix版只有256你可以在/httpd.h中

  看到:

  #ndef HARD_SERVER_LIMIT

  #def WIN32

  # HARD_SERVER_LIMIT 1024

  #

  # HARD_SERVER_LIMIT 256

  #end

  #end

  你可以把它调到1024然后再编译你系统记得在httpd.conf里也要更改相应配置

  MaxRequestsPerChild 30

  使用子进程方式提供服务Web服务常用方式是个子进程为次连接服务这样造成问题就是每次连接都需要生成、退出子进程系统操作使得这些额外处理过程占据了计算机大量处理能力因此最好方式是个子进程可以为多次连接请求服务这样就不需要这些生成、退出进程系统消耗 Apache就采用了这样方式次连接结束后子进程并不退出而是停留在系统中等待下次服务请求这样就极大提高了性能

  但由于在处理过程中子进程要不断申请和释放内存次数多了就会造成些内存垃圾就会影响系统稳定性并且影响系统资源有效利用因此在个副本处理过定次数请求的后就可以让这个子进程副本退出再从原始 httpd进程中重新复制个干净副本这样就能提高系统稳定性这样每个子进程处理服务请求次数由MaxRequestPerChild定义缺省设置值为30这个值对于具备高稳定性特点Linux系统来讲是过于保守设置可以设置为1000甚至更高设置为0支持每个副本进行无限次服务处理

  #Listen 3000

  #Listen 12.34.56.78:80

  #BindAddress *

  Listen参数可以指定服务器除了监视标准80端口的外还监视其他端口HTTP请求由于系统可以同时拥有多个IP地址因此也可以指定服务器只听取对某个BindAddress< /B>;IP地址HTTP请求如果没有配置这则服务器会回应对所有IP请求

  即使使用了BindAddress参数使得服务器只回应对个IP地址请求但是通过使用扩展Listen参数仍然可以让HTTP守护进程回应对其他IP地址请求此时Listen参数使用方法和上面第 2个例子相同这种比较复杂使用方法主要用于设置虚拟主机此后可以用 VirtualHost参数定义对区别IP虚拟主机然而这种使用方法是较早HTTP 1.0标准中设置虚拟主机思路方法每针对个虚拟主机就需要个IP地址实际上用处并不大在HTTP 1.1中增加了对单IP地址多域名虚拟主机支持使得虚拟主机设置具备更大意义

  模块变量

  LoadModule mime_magic_module libexec/apache/mod_mime_magic.so

  LoadModule info_module libexec/apache/mod_info.so

  LoadModule speling_module libexec/apache/mod_speling.so

  LoadModule proxy_module libexec/apache/libproxy.so

  LoadModule rewrite_module libexec/apache/mod_rewrite.so

  LoadModule anon_auth_module libexec/apache/mod_auth_anon.so

  LoadModule db_auth_module libexec/apache/mod_auth_db.so

  LoadModule digest_module libexec/apache/mod_digest.so

  LoadModule cern_meta_module libexec/apache/mod_cern_meta.so

  LoadModule expires_module libexec/apache/mod_expires.so

  LoadModule headers_module libexec/apache/mod_headers.so

  LoadModule usertrack_module libexec/apache/mod_usertrack.so

  LoadModule unique_id_module libexec/apache/mod_unique_id.so

  ClearModuleList

  AddModule mod_env.c

  AddModule mod_log_config.c

  AddModule mod_mime_magic.c

  AddModule mod_mime.c

  AddModule mod_negotiation.c

  AddModule mod_status.c

  AddModule mod_info.c

  AddModule mod_.c

  AddModule mod_autoindex.c

  AddModule mod_dir.c

  AddModule mod_cgi.c

  AddModule mod_asis.c

  AddModule mod_imap.c

  AddModule mod_actions.c

  AddModule mod_speling.c

  AddModule mod_userdir.c

  AddModule mod_proxy.c

  AddModule mod_alias.c

  AddModule mod_rewrite.c

  AddModule mod_access.c

  AddModule mod_auth.c

  AddModule mod_auth_anon.c

  AddModule mod_auth_db.c

  AddModule mod_digest.c

  AddModule mod_cern_meta.c

  AddModule mod_expires.c

  AddModule mod_headers.c

  AddModule mod_usertrack.c

  AddModule mod_unique_id.c

  AddModule mod_so.c

  AddModule mod_env.c

  Apache服务器个重要特性就是其模块化结构这不但表现为其能在编译时能通过新模块加入新功能还表现为其模块可以动态加载入http服务而不必载入不需要模块使用Apache动态加载模块只需要设置好Load Module和AddModule参数就可以了这种特性就是Apache DSO(Dynamic Shared Object)特性然而要想充分使用DSO特性仍然不是个简单事情不适当改动这里设置就可能造成服务器不能正常启动因此如果不是要增加或减少服务器提供功能就不要改动这里设置

  上面这些列表就显示了Linux下缺省Apache服务器支持模块事实上很多模块是没有必要不必要模块不会被载入内存模块可以静态连接到 apache 服务器内部也可以这样动态加载将Apache特性都编译成动态可加载模块是该Port做法而不是Apache缺省做法这样就以牺牲很小性能同时带来极大灵活性

  因而动态可加载能力还是对性能有轻微影响因此可以重新编译Apache将自己所需要功能编译进Apache 服务器内部可以让系统显得更为干净效率也有轻微提高通常仅仅为了这个目就重新编译Apache是没有必要如果需要增加其他特性而重新编译 Apache不妨在增加其他模块同时将所有模块都静态连接入Apache 服务器

  这些模块都被放置到/usr/local/apache/modules/目录下 每个模块对应Apache服务器个特性详细解释每个模块功能需要相当多篇幅其中比较重要特性将在后面相应地方中进行解释

  #ExtendedStatus On

  Apache服务器可以通过特殊HTTP请求来报告自身运行状态在使用测试工具测试时打开这个ExtendedStatus 参数可以让服务器报告更全面运行状态信息

  主服务器设置

  Apache服务器需要各种设置以定义自己使用各种参数以提供Web服务对于使用虚拟主机情况除了在虚拟主机定义项中覆盖设置的外(有设置必须重新定义)这里设置也是虚拟主机缺省设置

  Port 80

  Port定义了Standalone模式下httpd守护进程使用端口标准端口是80这个选项只对于以独立方式启动服务器才有效对于以inetd方式启动服务器则在inetd.conf中定义使用哪个端口

  在Unix下使用80端口需要root权限些管理员为了安全原因认为 httpd 服务器不可能没有安全漏洞因而更愿意使用普通用户权限来启动服务器这样就不能使用80端口及其他小于1024端口而必须使用大于 1024端口来启动httpd般情况下8000或8080也是常用端口而Apache httpd服务器本身可以在以root权限打开80端口后再改变为普通用户身份进行运行这样就减少了危险性因而就不需要考虑这个安全问题但是如果普通用户也想安装配置自己WWW服务器那么就不得不使用大于1024端口

  User nobody

  Group nogroup

  User和Group配置是Apache安全保证Apache在打开端口的后就将其本身设置为这两个选项设置用户和组权限进行运行这样就降低了服务器危险性这个选项也只用于 Standalone模式inetd模式在inetd.conf中指定运行Apache用户由于服务器必须执行改变身份uid操作因此进程应该具备root权限如果是使用非root用户来启动Aapche这个配置就不会发挥作用

Tags:  apacheweb服务器 apache服务器 linux系统优化 linux服务器系统

延伸阅读

最新评论

发表评论