Apache配置文件位置:
C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf
Apache核心(Core)配置
ServerRoot
设置了服务器所在的目录。一般来说它将包含conf/和logs/子目录。其它配置文件的相对路径即基于此目录 (比如Include或LoadModule)。
DocumentRoot
设置了httpd伺服的目录,服务器会将请求中的URL附加到DocumentRoot后面以构成指向文档的路径。指定DocumentRoot时不应包括最后的"/"。
如果directory-path不是绝对路径,则被假定为是相对于ServerRoot的路径。
KeepAlive
语法 KeepAlive On|Off
默认值 KeepAlive On
用以在同一个TCP连接中进行多次请求。
KeepAliveTimeout
默认值 KeepAliveTimeout 5
Apache在关闭持久连接前等待下一个请求的秒数。一旦收到一个请求,超时值将会被设置为Timeout指令指定的秒数。
对于高负荷服务器来说,KeepAliveTimeout值较大会导致一些性能方面的问题:超时值越大,与空闲客户端保持连接的进程就越多。
MaxKeepAliveRequests
默认值 MaxKeepAliveRequests 100
MaxKeepAliveRequests指令限制了当启用KeepAlive时,每个连接允许的请求数量。如果将此值设为"0",将不限制请求的数目。我们建议最好将此值设为一个比较大的值,以确保最优的服务器性能。
ServerName
设置了服务器用于辨识自己的主机名和端口号。比如,一个放置web服务器的主机名为simple.example.com ,但同时有一个DNS别名www.example.com 。
而您希望web服务器更显著一点,您可以使用如下的指令:
ServerName www.example.com:80
当没有指定ServerName时,服务器会尝试对IP地址进行反向查询来推断主机名。如果在ServerName中没有指定端口号,服务器会使用接受请求的那个端口。
为了加强可靠性和可预测性,您应该使用ServerName显式的指定一个主机名和端口号。
TimeOut
默认值 TimeOut 300
TimeOut指令用于设置Apache等待以下三种事件的时间长度:
1. 接受一个GET请求耗费的总时间。
2. POST或PUT请求时,接收两个TCP包之间的时间。
3. 应答时,TCP包传输中两个ACK包之间的时间。
多路处理模块(MPM)实现的公共指令
Listen
语法 Listen [IP-address:]portnumber [protocol]
指示Apache只在指定的IP地址和端口上监听;如果只指定一个端口,服务器将在所有地址上监听该端口。如果指定了地址和端口的组合,服务器将在指定地址的指定端口上监听。
Listen是一个必须设置的指令。如果在配置文件中找不到这个指令,服务器将无法启动。
使用多个Listen指令可以指定多个不同的监听端口和/或地址端口组合。服务器将会对列出的所有端口和地址端口组合上的请求作出应答。
例如,想要服务器接受80和8000端口上的请求,可以这样设置:
Listen 80
Listen 8000
为了让服务器在两个确定的地址端口组合上接受请求,可以这样设置:
Listen 192.170.2.1:80
Listen 192.170.2.5:8000
可选的protocol参数在大多数情况下并不需要。若未指定该参数,则将为443端口使用默认的https协议,为其它端口使用http协议。
仅在使用非标准端口时才需要指定protocol参数。比如在8443端口运行https协议:
Listen 192.170.2.1:8443 https
ListenBackLog
默认值 ListenBacklog 511
半链接(pending connection)队列的最大长度。
ServerLimit
服务器允许配置的进程数上限。
对于prefork MPM,这个指令设置了MaxClients最大允许配置的数值。
对于worker MPM,这个指令和ThreadLimit结合使用设置了MaxClients最大允许配置的数值。
使用这个指令时要特别当心。如果将ServerLimit设置成一个高出实际需要许多的值,将会有过多的共享内存被分配。
如果将ServerLimit和MaxClients设置成超过系统的处理能力,Apache可能无法启动,或者系统将变得不稳定。
对于preforkMPM,只有在你需要将MaxClients设置成高于默认值256的时候才需要使用这个指令。要将此指令的值保持和MaxClients一样。
对于workerMPM,只有在你需要将MaxClients和ThreadsPerChild设置成需要超过默认值16个子进程的时候才需要使用这个指令。不要将该指令的值设置的比MaxClients和ThreadsPerChild需要的子进程数量高。
注意:Apache在编译时内部有一个硬限制"ServerLimit 20000"(对于preforkMPM为"ServerLimit 200000")。你不能超越这个限制。
ThreadLimit
设置了每个子进程可配置的线程数ThreadsPerChild上限。
使用这个指令时要特别当心。如果将ThreadLimit设置成一个高出ThreadsPerChild实际需要很多的值,将会有过多的共享内存被分配。如果将ThreadLimit和ThreadsPerChild设置成超过系统的处理能力,Apache可能无法启动,或者系统将变得不稳定。该指令的值应当和ThreadsPerChild可能达到的最大值保持一致。
对于mpm_winnt,ThreadLimit的默认值是1920;对于其他MPM这个值是64。
注意:Apache在编译时内部有一个硬性的限制"ThreadLimit 20000"(对于mpm_winnt是"ThreadLimit 15000"),你不能超越这个限制。
ThreadsPerChild
设置了每个子进程建立的线程数。子进程在启动时建立这些线程后就不再建立新的线程了。如果使用一个类似于mpm_winnt只有一个子进程的MPM,这个数值要足够大,以便可以处理可能的请求高峰。如果使用一个类似于worker有多个子进程的MPM,每个子进程所拥有的所有线程的总数要足够大,以便可以处理可能的请求高峰。
对于mpm_winnt,ThreadsPerChild的默认值是64;对于其他MPM是25。
MaxClients
设置了允许同时伺服的最大接入请求数量。任何超过MaxClients限制的请求都将进入等候队列,直到达到ListenBacklog指令限制的最大值为止。一旦一个链接被释放,队列中的请求将得到服务。
对于非线程型的MPM(也就是prefork),MaxClients表示可以用于伺服客户端请求的最大子进程数量,默认值是256。要增大这个值,你必须同时增大ServerLimit 。
对于线程型或者混合型的MPM(也就是beos或worker),MaxClients表示可以用于伺服客户端请求的最大线程数量。
线程型的beos的默认值是50。对于混合型的MPM默认值是16(ServerLimit)乘以25(ThreadsPerChild)的结果。因此要将MaxClients增加到超过16个进程才能提供的时候,你必须同时增加ServerLimit的值。
MaxRequestsPerChild
默认值 MaxRequestsPerChild 10000
MaxRequestsPerChild指令设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。
不同的默认值:
在mpm_netware和mpm_winnt上的默认值是"0"。
将MaxRequestsPerChild设置成非零值有两个好处:
可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
注意:对于KeepAlive链接,只有第一个请求会被计数。事实上,它改变了每个子进程限制最大链接数量的行为。
ReceiveBufferSize
默认值 ReceiveBufferSize 0
这个指令设置服务器的TCP接收缓冲区的大小(字节)。提高这个值会导致两个后果:高速度和高潜伏时间(100ms左右)。
如果设置为"0",将使用操作系统默认值。
SendBufferSize
默认值 SendBufferSize 0
这个指令设置服务器的TCP发送缓冲区的大小(字节)。提高这个值会导致两个后果:高速度和高潜伏时间(100ms左右)。
如果设置为"0",将使用操作系统默认值。
StartServers
StartServers指令设置了服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数。
不同的MPM默认值也不一样。对于worker默认值是"3"。对于prefork默认值是"5",mpmt_os2是"2"。
StartThreads
设置了服务器启动时建立的线程数量。因为线程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数。
对于mpm_netware ,默认值是"50",由于只有一个进程,因此所有的线程都将用于伺服请求。
对于beos ,默认值是"10",同样也是所有的线程都将用于伺服请求。