Apache参数及优化

ServerTokens OS             # 隐藏系统和软件版本信息  注释则显示
ServerRoot  "/etc/httpd"     # 软件主目录
PidFile run/httpd.pid         # apache启动文件PID
    Timeout 60                  #不论接收或发送,当持续连接等待超过60秒则该次连接就中断
一般来说,此数值在300秒左右即可,不需要修改这个原始值
KeepAlive Off
这里最好把默认值“Off”修改为“On”
这里表示是否允许持续性的连接,也就是一个TCP连接可以具有多个文件资料传送的要求

举例来说,如果你的网页内含有很多图片文件,那么这一次连接就会将所有的数据传送完
而不必每一个图片都需要进行一次TCP连接。
MaxKeepAliveRequests 100
可以将默认的100改成500或更高
与上一个设置的值KeepAlive有关,当KeepAlive的值设置为On的时候,这个数值可以决定
该次连接能够传输的最大传输数量。为了提高效率则可以改大一点。0代表不限制
KeepAliveTimeout 65
在KeepAlive设置为“On”的情况下,该次连接在最后一次传输后等待延迟的秒数
当超过该秒数的时候该连接中断。保持默认值15即可,如果设置的值太高(等待时间较长)
在较忙碌的系统上面将会有较多的Apache程序占用资源,可能有效率方面的问题。


StartServers      8             #启动Apache的时候,唤醒几个PID来处理服务的。
#Apache使用了进程预派生的技术来处理请求,大大提高了响应速度,
MinSpareServers   5             #最小预备使用的PID数量
MaxSpareServers   20                #最大预备使用的PID数量
ServerLimit      4096               #服务器的限制
MaxClients      4096                #最多可以有多少个客户端同时连接到Apache
最大的同时连接数量,也就是process不会超过这一数值。
这个MaxClients设置值可以控制同时连上www服务器的总连接要求数量,
也可以将其看作是最高实时在线人数。不过要注意的是:这个值并非越大越好
因为他会消耗物理内存(与process有关),所以如果你设置太高导致超出物理内存
能够容许的范围,那么效率就会大大降低(因为会跑SWAP),此外,MaxClients也在
Apache编译的时候就指定最大值了,所以你也无法超出系统最大值,除非你重新编译Apache
MaxRequestsPerChild  4000
每个程序能够提供的最大传输次数要求。举例来说:如果有个用户连上服务器之后,
要求数百个网页,当他的要求数量超过这个值的时候则该程序会被丢弃,
另外切换一个新程序。这个设置可以有效地管理每个process在系统上存活的时间。
根据观察所得,新程序的效果较好。


StartServers         4
MaxClients         300
MinSpareThreads     25
MaxSpareThreads     75 
ThreadsPerChild     25
MaxRequestsPerChild  0


上面的prefork和worker其实就是两个与服务器连接资源有关的设置项目。
默认的项目配置对于一般中小型网站来说已经很够用了,不过如果网站的流量
比较大,也可以修订一下里面的数值。这两个模块都是用在提供用户连接资源,
设置的数值越大代表系统会启动越多的程序来提供Apache的服务,反映速度就比较快

Redhat和CentOS将这两个模块分别放到了不同的执行文件中,分别是
    |- /usr/sbin/httpd  使用prefork模块
    |- /usr/sbin/httpd.worker  使用worker模块

/etc/sysconfig/httpd这个文件决定了Apache使用哪一个模块,可以通过。
修改这个文件来切换不同的工作模式。
LoadModule cgi_module modules/mod_cgi.so
LoadModule version_module modules/mod_version.so
Apache提供了非常多的模块供我们使用,以上就是加载的模块
Include conf.d/*.conf
ServerAdmin root@localhost
系统管理员的邮箱,当网站出现问题的时候,错误信息会显示的联系邮箱
DocumentRoot   "/var/www/html"
上面这一行的配置指定了放置首页的目录

    Options FollowSymLinks
    AllowOverride None

Directory指定后面的路径是系统中的绝对路径
这个设置是针对www服务器的默认环境而来的,因为是针对“/”的设置
建议保留上面的默认值

使用Directory指定了一个绝对路径的目录
Options -Indexes FollowSymLinks
Options(目录参数)
此设置值表示在这个目录内能够让Apache进行的操作,也就是针对Apache的程序的权限设置。

主要的参数值有:
    Indexes:如果在此目录下找不到首页文件(默认为index.html)时,
    就显示整个目录下的文件名,至于首页文件名则与DirectoryIndex设置的值有关
    建议注释掉Indexes
    FollowSymLinks:这是Fllow Symolic Links的缩写,字面意义是让连接文件可以生效。
    我们知道首页的目录是在/var/www/html,既然是WWW的根目录,理论上就像被chroot
    一般。一般说来说被chroot的程序无法离开其目录,也就是说,默认的情况下,你在
    /var/www/html下面的连接文件只要链接到非此目录的其他地方,则该连接文件默认是失效的。
    但是使用这个设置可以让链接有效的离开本目录
    ExecCGI:让此目录具有执行CGI的权限,非常重要。举例来说,OpenWebMail使用了
    很多Perl程序,你要让OpenWebMail可以执行,就需要在该程序所在目录拥有ExecCGI
    的权限才行。但是要注意:不要让所有的目录均可以使用ExecCGI
    Includes:让一些Server-Side Include程序可以运行。建议可以加上去
    MultiViews:这个有点像是多国语言的支持,与语言数据有关。在错误信息的回报内容中
    最常见,在同一台主机中,可以依据客户端的语言而给予不同的语言显示。默认在回报
    信息中存在,你可以检查一下/var/www/error/目录下的数据。
AllowOverride None
允许覆盖参数功能
表示是否允许额外配置文件.htaccess的某些参数覆盖。我们可以在httpd.conf内设置好所有的权限
不过这样一来,若用户自己的个人网页想要修改权限时将会对管理员造成困扰。因此,Apache默认
可以让用户以目录下的.htaccess文件内覆盖内的某些功能参数。这个项目则是在规定
.htaccess可以覆盖的权限类型有哪些。常见的有以下几种:
    ALL:全部的权限均可以覆盖
    AuthConfig:仅有网页认证(帐号与密码)可以覆盖
    Indexes:仅允许Indexes方面的覆盖
    Limits:允许用户利用Allow、Deny与Order管理可浏览的权限
    None:不可覆盖,也就是让.htaccess文件失效
使用.htaccess会严重影响到Apache的性能,如果不是特殊需要,建议关闭

 Controls who can get stuff from this server.

    Order allow,deny
    Allow from all
能否登陆浏览的权限
决定此目录是否可被Apache的PID所浏览的权限设置。
能否被浏览主要有两种判断的方式:
    deny,allow  以deny优先处理,但没有写入规则的默认为allow
    allow,deny  以allow为优先处理,但是没有写入规则的默认为deny
所以在默认的情况下,因为是allow,deny 所以默认为deny(不可浏览)
不过在下一行有个allow from all,allow优先处理,因此全部客户端均可浏览

apache 配置文件

默认网页存放文件 /var/www/html

########## vi /etc/httpd/conf/httpd.conf ###################

documentroot "/var/www/html/"                   # 定义apache发布目录 (网站根目录)
listen 80                                      # 监听端口  默认端口
directoryindex index.html index.html.var            # 默认主页文件
servername www.baidu.com:80                   # 域名访问
serveradmin  [email protected]                 # 管理员邮箱

 virtual hosts
NameVirtualHost *:80      # 如果独立虚拟站点文件,需要在主配置文件中加入这条
include conf/vhost/*              # 开启虚拟主机

创建一个虚拟站点目录,

将虚拟主机分多个,www.a.com www.b.com

ServerTokens OS                                 # 系统版本
ServerRoot  "/etc/httpd"                           # 程序目录
PidFile run/httpd.pid                               # 过程pid号存放文件
Timeout 60                                      # 连接超时60秒
KeepAlive off                                     # off/on   是否持续性连接
MaxKeepAliveRequests 100                       # 连接能够传输最大传输数量
KeepAliveTimeOut 65                             # 该次连接在最后传输的等待廷迟(无操作)

 Apache工作模式


StartServers      8                              # 启动Apache的时候,唤醒几个PID进程来处理服务的。
#Apache使用了进程预派生的技术来处理请求,大大提高了响应速度,
MinSpareServers   5                              # 最小预留(空闲)使用的PID数量
MaxSpareServers   20                             # 最大预留(空闲)使用的PID数量
ServerLimit      4096                            # 最大并发进程数限制 不能大于maxclients
MaxClients      4096                             # 最多可以有多少个客户端同时连接到Apache
MaxRequestsPerChild  0           # 1个进程处理的最大请求数 0表示无限制

 Apache工作模式


StartServers         4
MaxClients         300
MinSpareThreads     25
MaxSpareThreads     75 
ThreadsPerChild     25          # 每个进程支持的线程数
MaxRequestsPerChild  0          #主

网站程序的根目录


    Options FollowSymLinks
    AllowOverride None
    Order deny, allow
Allow from all

发布目录站点权限,需要在配置文件中授权,否则无法访问


    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
Allow from al
BandwidthModule On # 启动带宽限制
  ForceBandwidthModule On # 启动带宽限制
  MaxConnection all 2000 # 最大连接数2000
  Bandwidth all 200000 # 单个客户端最大带宽200KB



    DirectoryIndex index.html index.hml    # 默认主页,可以任何名称,有顺序


     #匹配文件权限
    Order allow,deny
    Deny from all
    Satisfy All


ErrorLog "logs/error_log"
LogLevel warn         # 日志级别


    ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"     # 目录别名


       # 目录别名的应用
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all


DefaultType text/plain        # 默认文件类型

             # 支持文件类型
    TypesConfig conf/mime.types
    AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php


       # ssl加密
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin


     日志格式
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""  aming    

定义日志过滤时需添加

You need to enable mod_logio.c to use %I and %O

      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    
      CustomLog "logs/access_log" common    # 开启访问日志

对cgi支持 可以注销点,很少使用


    ScriptAlias /cgi-bin/ "/usr/local/apache//cgi-bin/"




    AllowOverride None
    Options None
    Order allow,deny
    Allow from all