描述: | 转储核心之前Apache HTTP Server尝试切换的目录 |
---|---|
句法: | CoreDumpDirectory directory |
默认: | See usage for the default setting |
内容: | 服务器配置 |
状态: | MPM |
模块: | event ,worker ,prefork |
这控制了在转储内核之前Apache httpd尝试切换到的目录。如果您的操作系统配置为在崩溃过程的工作目录中创建核心文件,
CoreDumpDirectory
则有必要从默认ServerRoot
目录更改工作目录,默认目录不能由服务器运行时的用户写入。
如果要使用核心转储进行调试,则可以使用此伪指令将其放置在其他位置。如果您的操作系统未配置为将核心文件写入崩溃进程的工作目录,则此指令无效。
在Linux上使用此指令可能允许系统上的其他进程(如果以类似的特权运行,例如CGI脚本)通过ptrace
系统调用附加到httpd子级。这可能会削弱对某些安全攻击的保护。不建议在生产系统上使用此指令。
如果Apache httpd以root身份启动并切换到另一个用户,则Linux内核将禁用核心转储,即使该进程的目录是可写的。Apache httpd(2.0.46及更高版本)可在Linux 2.4及更高版本上重新启用核心转储,但前提是您明确配置了CoreDumpDirectory
。
要在BSD系统(例如FreeBSD)上启用suid可执行文件的核心转储,请设置kern.sugid_coredump
为1。
CoreDumpDirectory
仅对一组致命信号进行处理:SIGFPE,SIGILL,SIGABORT,SIGSEGV和SIGBUS。
在某些操作系统上,SIGQUIT还会导致核心转储,但不会通过CoreDumpDirectory
或
EnableExceptionHook
处理,因此核心位置完全由操作系统决定。
描述: | 启用在崩溃后运行异常处理程序的钩子 |
---|---|
句法: | EnableExceptionHook On|Off |
默认: | EnableExceptionHook Off |
内容: | 服务器配置 |
状态: | MPM |
模块: | event ,worker ,prefork |
出于安全原因,仅当服务器配置了该--enable-exception-hook
选项时,此伪指令才可用。它启用了一个挂钩,该挂钩允许外部模块在孩子撞车后插入并执行某些操作。
已经有两个模块,mod_whatkilledus
并且
mod_backtrace
使用了这个钩子。请访问Jeff Trawick的EnableExceptionHook网站,以获取有关这些信息的更多信息。
描述: | 指定一个超时,在此超时后,正常关闭服务器将退出。 |
---|---|
句法: | GracefulShutdownTimeout seconds |
默认: | GracefulShutdownTimeout 0 |
内容: | 服务器配置 |
状态: | MPM |
模块: | event ,worker ,prefork |
兼容性: | 在2.2版和更高版本中可用 |
该GracefulShutdownTimeout
规定如何收到“优雅停止”信号后多少秒,服务器应继续运行,处理现有的连接。
将此值设置为零意味着服务器将无限期等待,直到所有剩余的请求都已完全满足为止。
描述: | 服务器监听的IP地址和端口 |
---|---|
句法: | Listen [IP-address:]portnumber [protocol] |
内容: | 服务器配置 |
状态: | MPM |
模块: | event ,worker ,prefork ,mpm_winnt ,mpm_netware ,mpmt_os2 |
兼容性: | 的协议参数在2.1.5中加入 |
该Listen
指令指示Apache httpd仅侦听特定的IP地址或端口。默认情况下,它响应所有IP接口上的请求。Listen
现在是必需的指令。如果它不在配置文件中,则服务器将无法启动。这是对Apache httpd以前版本的更改。
该Listen
指令告诉服务器在指定的端口或地址和端口组合上接受传入的请求。如果仅指定端口号,则服务器在所有接口上侦听给定的端口。如果提供了IP地址和端口,则服务器将侦听给定的端口和接口。
Listen
可以使用多个指令来指定要侦听的地址和端口的数量。服务器将响应来自任何列出的地址和端口的请求。
例如,要使服务器接受端口80和8000上的连接,请使用:
Listen 80 Listen 8000
要使服务器接受两个指定接口和端口号上的连接,请使用
Listen 192.170.2.1:80 Listen 192.170.2.5:8000
IPv6地址必须用方括号括起来,如以下示例所示:
Listen [2001:db8::a00:20ff:fea7:ccea]:80
对于大多数配置,不需要可选的协议参数。如果未指定,https
则是端口443 http
的默认值,是所有其他端口的默认值。该协议用于确定哪个模块应处理请求,并通过AcceptFilter
指令应用协议特定的优化
。
仅在非标准端口上运行时,才需要设置协议。例如,https
在端口8443上运行站点:
Listen 192.170.2.1:8443 https
Listen
相同IP地址和端口的
多个指令将导致Address already in use
错误消息。
描述: | 挂起连接队列的最大长度 |
---|---|
句法: | ListenBackLog backlog |
默认: | ListenBackLog 511 |
内容: | 服务器配置 |
状态: | MPM |
模块: | event ,worker ,prefork ,mpm_winnt ,mpm_netware ,mpmt_os2 |
挂起的连接队列的最大长度。通常不需要调整。但是,在某些系统上,当受到TCP SYN泛洪攻击时,希望增加此数量。请参阅listen(2)
系统调用的backlog参数
。
操作系统通常会将其限制为较小的数量。随操作系统的不同而不同。另请注意,许多操作系统并未完全使用指定为待办事项的列表,而是使用基于(但通常大于)设置值的数字。
描述: | CPU核心数(在线)与侦听器存储桶数之间的比率 |
---|---|
句法: | ListenCoresBucketsRatio ratio |
默认: | ListenCoresBucketsRatio 0 (disabled) |
内容: | 服务器配置 |
状态: | MPM |
模块: | event ,worker ,prefork |
兼容性: | 在Apache HTTP Server 2.4.17中可用,其内核支持socket选项,SO_REUSEPORT 并使用该选项(例如Linux 3.9及更高版本,但不支持SO_REUSEPORT
* BSD 的当前实现)在侦听进程(或线程)套接字之间平均分配新连接。。 |
甲比率(在线)CPU内核的数量和听众桶的数目之间可以用来使Apache HTTP服务器创建
num_cpu_cores / ratio
听桶,每一个包含它自己Listen
相同的端口(一个或多个)上-ing插座(多个),然后让每个孩子处理一个单独的存储桶(在创建孩子时按循环分配存储桶)。
在Linux(以及BSD)上,如果
配置了Hotplug,则可以打开/关闭CPU内核
,因此ListenCoresBucketsRatio
在计算要创建的存储桶数时需要考虑此参数。
ListenCoresBucketsRatio
当接受新连接成为瓶颈时,可以提高可伸缩性。在具有大量CPU内核的系统上,启用此功能已经过测试,显示出显着的性能改进和更短的响应时间。
要使之处于活动状态,CPU核的数量必须至少比配置的比率多两倍。推荐的
比率为8
,因此,16
使用此值时,至少内核应在运行时可用。需要为每个目标系统计算正确的比率以获得最大性能,测试多个值并观察关键性能指标的变化。
该指令会影响MinSpareThreads
和
MaxSpareThreads
下限值的计算
。子进程的数量必须是存储桶数量的倍数,才能最佳地接受连接。
Listen
同一IP地址和端口上的多个er或Apache HTTP服务器因此SO_REUSEPORT
,在侦听套接字上设置该选项将允许多个进程(EUID
例如,共享相同的进程root
)绑定到相同的IP地址和端口,而在通常情况下系统不会出现绑定错误。
这也意味着以相同的方式配置IP:port
并带有肯定值的Apache httpd的多个实例也ListenCoresBucketsRatio
将开始运行而不会出现错误,然后在传入连接在两个实例之间均匀分布的情况下运行(在任何情况下,这都不是建议或明智的用法,但是只是一个通知,它将阻止发现此类可能的问题)。
在同一实例中,如果Listen
在完全相同的IP(或主机名)和端口上配置了多个指令,Apache httpd将检查并无法启动,从而避免了创建一些重复的存储桶,这些存储桶是无用的,并且会降低性能。但是,它不能(也不会更努力地)捕获所有可能重叠的情况(例如将主机名解析为其他地方使用的IP)。
描述: | 限制单个子级服务器在其生存期内要处理的连接数 |
---|---|
句法: | MaxConnectionsPerChild number |
默认: | MaxConnectionsPerChild 0 |
内容: | 服务器配置 |
状态: | MPM |
模块: | event ,worker ,prefork ,mpm_winnt ,mpm_netware ,mpmt_os2 |
兼容性: | 可用的Apache HTTP Server 2.3.9和更高版本。MaxRequestsPerChild 仍然支持旧名称
。 |
该MaxConnectionsPerChild
指令设置单个子服务器进程将处理的连接数限制。后
MaxConnectionsPerChild
连接,子进程就会死亡。如果MaxConnectionsPerChild
为
0
,则该过程将永不过期。
设置MaxConnectionsPerChild
为非零值将限制进程因(偶然)内存泄漏而消耗的内存量。
描述: | 主分配器无需调用即可保留的最大内存量 free() |
---|---|
句法: | MaxMemFree KBytes |
默认: | MaxMemFree 2048 |
内容: | 服务器配置 |
状态: | MPM |
模块: | event ,worker ,prefork ,mpm_winnt ,mpm_netware |
该MaxMemFree
指令规定,每一个分配器被允许保留,而无需调用的自由字节的最大数量free()
。在线程MPM中,每个线程都有自己的分配器。设置为零时,阈值将设置为无限制。
描述: | 同时处理的最大连接数 |
---|---|
句法: | MaxRequestWorkers number |
默认: | See usage for details |
内容: | 服务器配置 |
状态: | MPM |
模块: | event ,worker ,prefork |
该MaxRequestWorkers
指令设置了将同时服务的请求数的限制。任何超出MaxRequestWorkers
限制的连接尝试通常都会排队,最多可以根据ListenBacklog
指令进行排队
。一旦在另一个请求结束时释放了子进程,则将为连接提供服务。
对于非线程服务器(即,prefork
),
MaxRequestWorkers
转换成将要推出的服务请求的子进程的最大数量。默认值为256
; 要增加它,您还必须加注
ServerLimit
。
对于线程服务器和混合服务器(例如 event
或worker
),MaxRequestWorkers
限制可用于服务客户端的线程总数。对于混合的MPM,默认值是16
(ServerLimit
)乘以的值
25
(ThreadsPerChild
)。因此,要增加到MaxRequestWorkers
需要超过16个过程的值,还必须提高ServerLimit
。
MaxRequestWorkers
MaxClients
在2.3.13版之前被调用
。仍然支持旧名称。
描述: | 最大空闲线程数 |
---|---|
句法: | MaxSpareThreads number |
默认: | See usage for details |
内容: | 服务器配置 |
状态: | MPM |
模块: | event ,worker ,mpm_netware ,mpmt_os2 |
最大空闲线程数。不同的MPM处理此指令的方式有所不同。
对于worker
和event
,默认值为
MaxSpareThreads 250
。这些MPM在服务器范围内处理空闲线程。如果服务器中的空闲线程过多,则子进程将被杀死,直到空闲线程的数量小于该数量为止。如果ListenCoresBucketsRatio
启用,可能会创建其他进程/线程。
对于mpm_netware
默认为
MaxSpareThreads 100
。由于此MPM运行单个进程,因此备用线程数也在服务器范围内。
mpmt_os2
与...类似mpm_netware
。对于
mpmt_os2
默认值10
。
MaxSpareThreads
值的范围受到限制。Apache httpd将根据以下规则自动更正给定值:
mpm_netware
希望该值大于
MinSpareThreads
。worker
和event
,该值必须大于或等于所述总和
MinSpareThreads
和
ThreadsPerChild
。描述: | 可用于处理请求峰值的最小空闲线程数 |
---|---|
句法: | MinSpareThreads number |
默认: | See usage for details |
内容: | 服务器配置 |
状态: | MPM |
模块: | event ,worker ,mpm_netware ,mpmt_os2 |
处理请求峰值的最小空闲线程数。不同的MPM处理此指令的方式有所不同。
worker
并在服务器范围内event
使用默认值
MinSpareThreads 75
并处理空闲线程。如果服务器中没有足够的空闲线程,则将创建子进程,直到空闲线程的数量大于number为止。如果ListenCoresBucketsRatio
启用,可能会创建其他进程/线程。
mpm_netware
使用默认值,
MinSpareThreads 10
并且由于它是单进程MPM,因此在服务器范围内对其进行跟踪。
mpmt_os2
与...类似mpm_netware
。对于
mpmt_os2
默认值5
。
描述: | 服务器记录守护程序的进程ID的文件 |
---|---|
句法: | PidFile filename |
默认: | PidFile logs/httpd.pid |
内容: | 服务器配置 |
状态: | MPM |
模块: | event ,worker ,prefork ,mpm_winnt ,mpmt_os2 |
该PidFile
指令设置到服务器记录守护程序的进程ID文件。如果文件名不是绝对的,则假定它是相对于的
ServerRoot
。
PidFile /var/run/apache.pid
能够向服务器发送信号,以便关闭服务器,然后重新打开其ErrorLog
和TransferLog
,并重新读取其配置文件,通常很有用。这是通过将SIGHUP(kill -1)信号发送到中列出的进程ID来完成的
PidFile
。
该PidFile
受有关日志文件的位置和相同的警告信息的安全。
从Apache HTTP Server 2开始,我们建议您仅使用apachectl
脚本或操作系统提供的初始化脚本来(重新)启动或停止服务器。
描述: | TCP接收缓冲区大小 |
---|---|
句法: | ReceiveBufferSize bytes |
默认: | ReceiveBufferSize 0 |
内容: | 服务器配置 |
状态: | MPM |
模块: | event ,worker ,prefork ,mpm_winnt ,mpm_netware ,mpmt_os2 |
服务器会将TCP接收缓冲区大小设置为指定的字节数。
如果设置为0
,则服务器将使用操作系统默认值。
描述: | 用于存储子流程的协调数据的文件的位置 |
---|---|
句法: | ScoreBoardFile file-path |
默认: | ScoreBoardFile logs/apache_runtime_status |
内容: | 服务器配置 |
状态: | MPM |
模块: | event ,worker ,prefork ,mpm_winnt |
Apache HTTP Server使用记分板在其父进程和子进程之间进行通信。一些体系结构需要一个文件来促进这种通信。如果未指定文件,则Apache httpd首先尝试完全在内存中创建记分板(使用匿名共享内存),否则,将尝试在磁盘上创建文件(使用基于文件的共享内存)。指定此伪指令将导致Apache httpd始终在磁盘上创建文件。
ScoreBoardFile /var/run/apache_runtime_status
基于文件的共享内存对于需要直接访问记分板的第三方应用程序很有用。
如果使用ScoreBoardFile
,则将其放在RAM磁盘上可能会提高速度。但是请注意,请注意有关日志文件放置和安全性的相同警告。
描述: | TCP缓冲区大小 |
---|---|
句法: | SendBufferSize bytes |
默认: | SendBufferSize 0 |
内容: | 服务器配置 |
状态: | MPM |
模块: | event ,worker ,prefork ,mpm_winnt ,mpm_netware ,mpmt_os2 |
将服务器的TCP发送缓冲区大小设置为指定的字节数。在高速,高延迟的连接(即 100ms左右,例如跨大陆快速管道)上设置超过OS的标准默认值通常很有用。
如果设置为0
,则服务器将使用操作系统提供的默认值。
可能需要对操作系统进行进一步的配置才能在高速,高延迟的连接上获得更好的性能。
在某些操作系统上,SendBufferSize
除非EnableSendfile
将其设置为OFF,否则可能看不到
TCP行为的改变。此交互仅适用于静态文件。
描述: | 可配置进程数的上限 |
---|---|
句法: | ServerLimit number |
默认: | See usage for details |
内容: | 服务器配置 |
状态: | MPM |
模块: | event ,worker ,prefork |
对于prefork
MPM,此伪指令设置MaxRequestWorkers
Apache httpd进程生存期内的最大配置值。对于worker
和event
MPM,此伪指令与一起ThreadLimit
设置MaxRequestWorkers
Apache httpd进程生存期内的最大配置值。对于event
MPM,此伪指令还定义了可以继续运行并完成对打开的连接的处理的旧服务器进程数。在重新启动期间更改此指令的任何尝试将被忽略,但
MaxRequestWorkers
可以在重新启动期间进行修改。
使用此指令时必须特别注意。如果
ServerLimit
将其设置为比必要值高得多的值,则会分配额外的未使用共享内存。如果将ServerLimit
和MaxRequestWorkers
都设置为高于系统可以处理的值,则Apache httpd可能无法启动,或者系统可能变得不稳定。
对于prefork
MPM,仅当您需要设置MaxRequestWorkers
大于256(默认值)时才使用此伪指令。请勿将此指令的值设置为高于您可能要设置的值MaxRequestWorkers
。
使用worker
,仅当您的MaxRequestWorkers
和ThreadsPerChild
设置需要超过16个服务器进程时才使用此伪指令
(默认)。不要设置该指令的任何比你可能想什么所需的服务器进程的数目更高的价值MaxRequestWorkers
和ThreadsPerChild
。
随着event
,增加该指令如果由你定义的流程数量MaxRequestWorkers
和ThreadsPerChild
设置,以及正常关闭进程的数量,超过16个服务器进程(默认)。
ServerLimit 20000
编译到服务器中存在硬限制(对于prefork
MPM 200000)。这样做是为了避免错别字引起的令人讨厌的影响。为了使其进一步超过此限制,您将需要修改mpm源文件中的MAX_SERVER_LIMIT值并重建服务器。
描述: | 启动时创建的子服务器进程数 |
---|---|
句法: | StartServers number |
默认: | See usage for details |
内容: | 服务器配置 |
状态: | MPM |
模块: | event ,worker ,prefork ,mpmt_os2 |
该StartServers
指令设置启动时创建的子服务器进程的数量。如根据负载动态地控制的过程的数量,(见
MinSpareThreads
,
MaxSpareThreads
,
MinSpareServers
,MaxSpareServers
)通常有什么理由调整此参数。
缺省值因MPM而异。worker
并
event
默认为StartServers 3
;
prefork
默认为5
; mpmt_os2
默认为2
。
描述: | 启动时创建的线程数 |
---|---|
句法: | StartThreads number |
默认: | See usage for details |
内容: | 服务器配置 |
状态: | MPM |
模块: | mpm_netware |
启动时创建的线程数。如根据负载动态地控制线程的数量,(见
MinSpareThreads
,
MaxSpareThreads
,
MinSpareServers
,MaxSpareServers
)通常有什么理由调整此参数。
对于mpm_netware
默认值为
StartThreads 50
and,因为只有一个进程,所以这是在启动时为服务请求而创建的线程总数。
描述: | 设置每个子进程的可配置线程数上限 |
---|---|
句法: | ThreadLimit number |
默认: | See usage for details |
内容: | 服务器配置 |
状态: | MPM |
模块: | event ,worker ,mpm_winnt |
该伪指令ThreadsPerChild
为Apache httpd进程的生存期设置最大配置值。重新启动期间更改此伪指令的任何尝试都将被忽略,但ThreadsPerChild
可以在重新启动期间进行修改,直到此伪指令的值。
使用此指令时必须特别注意。如果
ThreadLimit
将其设置为远远大于的值ThreadsPerChild
,则会分配额外的未使用共享内存。如果将
ThreadLimit
和ThreadsPerChild
都设置为高于系统可以处理的值,则Apache httpd可能无法启动,或者系统可能变得不稳定。请勿将此指令的值设置为高于ThreadsPerChild
当前运行的Apache httpd的最大预测设置。
其缺省值ThreadLimit
是
1920
当用于mpm_winnt
和
64
与他人使用时。
描述: | 每个子进程创建的线程数 |
---|---|
句法: | ThreadsPerChild number |
默认: | See usage for details |
内容: | 服务器配置 |
状态: | MPM |
模块: | event ,worker ,mpm_winnt |
该指令设置每个子进程创建的线程数。子级在启动时创建这些线程,而从不创建更多线程。如果使用MPM之类的MPM mpm_winnt
,其中只有一个子进程,则此数字应足够大以处理服务器的整个负载。如果使用MPM之类的MPM worker
,其中有多个子进程,则线程总数应足够高以处理服务器上的常见负载。
其缺省值ThreadsPerChild
是
64
当用于mpm_winnt
和
25
与他人使用时。
的值ThreadsPerChild
不能超过的值ThreadLimit
。如果配置了更高的值,它将在启动时自动减小并记录警告。这两个指令之间的关系在中进行了说明ThreadLimit
。
描述: | 处理客户端连接的线程使用的堆栈大小(以字节为单位) |
---|---|
句法: | ThreadStackSize size |
默认: | 65536 on NetWare; varies on other operating systems |
内容: | 服务器配置 |
状态: | MPM |
模块: | event ,worker ,mpm_winnt ,mpm_netware ,mpmt_os2 |
兼容性: | 在Apache HTTP Server 2.1和更高版本中可用 |
该ThreadStackSize
指令设置用于处理客户端连接并调用模块以帮助处理这些连接的线程堆栈(用于自动数据)的大小。在大多数情况下,操作系统默认的堆栈大小是合理的,但是在某些情况下可能需要对其进行调整:
ThreadStackSize
为高于操作系统默认值的值,可以解决这种类型的崩溃。仅当第三方模块的提供者指定需要此调整,或者诊断为Apache httpd崩溃表明线程堆栈大小过小时,才需要进行这种调整。ThreadStackSize
设置为小于操作系统默认值的值,则每个子进程可以实现更多数量的线程。此类调整仅应在允许执行完整的Web服务器处理的测试环境中进行,因为不经常出现的请求需要更多的堆栈来处理。所需的最小堆栈大小在很大程度上取决于所使用的模块,但是Web服务器配置中的任何更改都可能使当前ThreadStackSize
设置无效。ulimit -s
(如果没有限制,则为
8MB)用作默认堆栈大小。ThreadStackSize
除非每个子进程需要大量线程。在某些平台(包括Linux)上,设置128000已经太低,导致某些常用模块崩溃。