• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • mpm_common

    CoreDumpDirectory 指令

    描述:Apache HTTP Server 在转储核心之前尝试切换的目录
    句法:CoreDumpDirectory directory
    默认:See usage for the default setting
    Context:服务器配置
    状态:MPM
    模块:event,worker,prefork

    它控制 Apache httpd 在转储核心之前尝试切换的目录。如果您的操作系统配置为在崩溃 process 的工作目录中创建核心 files,则需要CoreDumpDirectory来更改默认ServerRoot目录中的工作目录,该目录不应由服务器运行的用户写入。

    如果需要核心转储以进行调试,可以使用此指令将其放在不同的位置。如果未将操作系统配置为将核心 files 写入崩溃进程的工作目录,则此指令无效。

    Linux 系统的安全说明

    在 Linux 上使用此指令可能允许系统上的其他进程(如果 running 具有类似的特权,例如 CGI 脚本)通过ptrace系统调用附加到 httpd 子进程。这可能会削弱对某些安全攻击的保护。不建议在 production 系统上使用此指令。

    Linux 上的核心转储

    如果 Apache httpd 以 root 身份启动并切换到另一个用户,则 Linux 内核会禁用核心转储,即使该目录对于 process 是可写的。 Apache httpd(2.0.46 和更高版本)在 Linux 2.4 及更高版本上重新启用核心转储,但前提是您明确配置CoreDumpDirectory

    BSD 上的核心转储

    要在 BSD-systems 上启用 core-dumping suid-executables(例如 FreeBSD),请将kern.sugid_coredump设置为 1。

    具体信号

    CoreDumpDirectory处理仅针对 select 致命信号集发生:SIGFPE,SIGILL,SIGABORT,SIGSEGV 和 SIGBUS。

    在某些操作系统上,SIGQUIT 也会导致核心转储,但不会经过CoreDumpDirectoryEnableExceptionHook处理,因此核心位置完全由操作系统决定。

    EnableExceptionHook 指令

    描述:在崩溃后启用运行 exception 处理程序的 hook
    句法:EnableExceptionHook On\|Off
    默认:EnableExceptionHook Off
    Context:服务器配置
    状态:MPM
    模块:event,worker,prefork

    出于安全原因,仅当服务器配置了--enable-exception-hook选项时,此指令才可用。它启用了一个 hook,允许外部模块插入并在子程序崩溃后执行某些操作。

    已经有两个模块mod_whatkilledusmod_backtrace使用了这个 hook。有关这些内容的更多信息,请查看 Jeff Trawick 的EnableExceptionHook 站点。

    GracefulShutdownTimeout 指令

    描述:指定超时,然后正常关闭服务器将退出。
    句法:GracefulShutdownTimeout seconds
    默认:GracefulShutdownTimeout 0
    Context:服务器配置
    状态:MPM
    模块:event,worker,prefork
    兼容性:可在 version 2.2 及更高版本中使用

    GracefulShutdownTimeout指定在收到“graceful-stop”信号后多少秒,服务器应_继续 run,处理现有连接。

    将此 value 设置为零意味着服务器将无限期地等待,直到所有剩余请求都已完全提供。

    听指令

    描述:服务器侦听的 IP 地址和端口
    句法:Listen[IP-address:]portnumber[protocol]
    Context:服务器配置
    状态:MPM
    模块:event,worker,prefork, mpm_winnt, mpm_netware, mpmtos2
    兼容性:协议参数在 2.1.5 中添加

    Listen指令指示 Apache httpd 仅侦听特定的 IP 地址或端口;默认情况下,它响应所有 IP 接口上的请求。Listen现在是必需的指令。如果它不在配置文件中,则服务器将无法启动。这是对以前版本的 Apache httpd 的更改。

    Listen指令告诉服务器接受指定 port 或 address-and-port 组合的传入请求。如果仅指定了 port 编号,则服务器将侦听所有接口上的给定 port。如果给出 IP 地址和 port,服务器将侦听给定的 port 和接口。

    多个Listen指令可用于指定要侦听的多个地址和端口。服务器将响应来自任何列出的地址和端口的请求。

    例如,要使服务器接受 port 80 和 port 8000 上的连接,请使用:

    Listen 80
    Listen 8000
    

    要使服务器接受两个指定接口和 port numbers 上的连接,请使用

    Listen 192.170.2.1:80
    Listen 192.170.2.5:8000
    

    IPv6 地址必须用方括号括起来,如下例所示:

    Listen [2001:db8::a00:20ff:fea7:ccea]:80
    

    大多数配置不需要可选的协议参数。如果未指定,https是 port 443 的默认值,http是所有其他端口的默认值。该协议用于确定哪个模块应处理请求,以及使用AcceptFilter指令应用协议特定的优化。

    如果要在 non-standard 端口上运行,则只需设置协议。例如,在 port 8443 上运行https站点:

    Listen 192.170.2.1:8443 https
    

    错误情况

    对于相同的 ip 地址和 port,多个Listen指令将导致Address already in use错误消息。

    参见

    • DNS 问题
    • 设置 Apache HTTP Server 使用的地址和端口
    • 进一步讨论地址已在使用中的错误消息,包括其他原因。

    ListenBackLog 指令

    描述:挂起连接队列的最大长度
    句法:ListenBackLog backlog
    默认:ListenBackLog 511
    Context:服务器配置
    状态:MPM
    模块:event,worker,prefork, mpm_winnt, mpm_netware, mpmtos2

    挂起连接队列的最大长度。通常不需要或不需要调整,但是在某些系统上,希望在 TCP SYN 泛洪攻击下增加此调整。请参阅listen(2)系统调用的 backlog 参数。

    这通常被操作系统限制为较小的数量。这从 OS 到 OS 不等。另请注意,许多操作系统并未完全使用指定为积压的操作系统,而是使用基于(但通常大于)设置的数字。

    ListenCoresBucketsRatio 指令

    描述:CPU 核心数(在线)与 listeners 桶数之间的比率
    句法:ListenCoresBucketsRatio ratio
    默认:ListenCoresBucketsRatio 0(disabled)
    Context:服务器配置
    状态:MPM
    模块:event,worker,prefork
    兼容性:在 Apache HTTP Server 2.4.17 中可用,内核支持 socket 选项SO_REUSEPORT并在使用它的侦听进程(或线程)套接字之间均匀分配新连接(例如 Linux 3.9 及更高版本,但不包括* BSD 中SO_REUSEPORT的当前 implementations)。

    (在线)CPU 核心数和 listeners 桶数之间的比率可用于使 Apache HTTP Server 创建num_cpu_cores / ratio监听桶,每个桶包含自己的听-ing socket(s),然后让每个子进程处理单个存储桶(在子节点创建 time 时使用 round-robin 分配存储桶)。

    “在线”CPU 核心的含义

    在 Linux(以及 BSD)上,如果配置了热插拔,则可以将 CPU 内核设置为 on/off,因此在计算要创建的桶数时,ListenCoresBucketsRatio需要考虑此参数。

    ListenCoresBucketsRatio可以在接受新连接时提高可扩展性 is/becomes 瓶颈。在具有大量 CPU 内核的系统上,启用此 feature 已经过测试,可显示出显着的性能提升和更短的响应时间。

    必须至少有两倍于 CPU 内核的 CPU 内核数量才能活动。建议的比率为8,因此在使用此 value 时,运行时至少应有16个核心。需要为每个目标系统计算获得最大 performance 的正确比率,测试多个值并观察 key performance metrics 中的变化。

    该指令影响MinSpareThreads和MaxSpareThreads下限值的计算。子进程的数量需要是最佳接受连接的桶数的倍数。

    同一 IP 地址和 port 上的多个 Listeners 或 Apache HTTP 服务器

    因此,在监听 socket(s 上设置SO_REUSEPORT选项允许多个进程(共享相同的EUID,e.g.root)绑定到相同的 IP 地址和 port,而不会在通常情况下由系统引发 binding 错误。

    这也意味着 Apache httpd 的多个实例配置在同一个IP:port上并且带有正ListenCoresBucketsRatio也会在没有错误的情况下启动,然后 run 与传入连接在两个实例中均匀分布(这不是建议或任何情况下的明智用法),但只是注意到它会阻止检测到这些可能的问题)。

    在同一实例中,如果在完全相同的 IP(或主机名)和 port 上配置了多个Listen指令,Apache httpd 将检查并且无法启动,从而避免创建一些无用的并且杀死性能的重复存储桶。但是它不能(并且不会更加努力)捕获所有可能的重叠情况(例如解析为其他地方使用的 IP 的主机名)。

    MaxConnectionsPerChild 指令

    描述:限制单个子服务器在其生命周期中将处理的连接数
    句法:MaxConnectionsPerChild number
    默认:MaxConnectionsPerChild 0
    Context:服务器配置
    状态:MPM
    模块:event,worker,prefork, mpm_winnt, mpm_netware, mpmtos2
    兼容性:可用 Apache HTTP Server 2.3.9 及更高版本。旧的 name MaxRequestsPerChild仍然受支持。

    MaxConnectionsPerChild指令设置了对单个子服务器 process 将处理的连接数的限制。在MaxConnectionsPerChild连接之后,子 process 将会死亡。如果MaxConnectionsPerChild0,则 process 将永不过期。

    MaxConnectionsPerChild设置为 non-zero value 会限制 process 可以消耗的 memory(意外)memory 泄漏量。

    MaxMemFree 指令

    描述:在不调用free()的情况下允许主分配器保留的最大 memory 数量
    句法:MaxMemFree KBytes
    默认:MaxMemFree 2048
    Context:服务器配置
    状态:MPM
    模块:event,worker,prefork, mpm_winnt, mpm_netware

    MaxMemFree指令设置允许每个分配器保持的最大空闲 Kbytes 数,而不调用free()。在线程 MPM 中,每个线程都有自己的分配器。设置为零时,阈值将设置为无限制。

    MaxRequestWorkers 指令

    描述:将同时处理的最大连接数
    句法:MaxRequestWorkers number
    默认:See usage for details
    Context:服务器配置
    状态:MPM
    模块:event,worker,prefork

    MaxRequestWorkers指令设置了将要提供的同时请求数量的限制。任何超过MaxRequestWorkers限制的连接尝试通常都会排队,最多为基于将 ListenBackLog指令的数字。一旦在另一个请求结束时释放子 process,则将为该连接提供服务。

    对于 non-threaded 服务器(i.e.,预派生),MaxRequestWorkers转换为将为服务请求启动的最大子进程数。默认的 value 是256;为了增加它,你还必须提高将 ServerLimit。

    对于线程和混合服务器(e.g.事件或工人),MaxRequestWorkers限制可用于为客户端提供服务的线程总数。对于混合 MPM,默认 value 是16(将 ServerLimit)乘以25(ThreadsPerChild)的 value。因此,要将MaxRequestWorkers增加到需要超过 16 个进程的 value,还必须引发将 ServerLimit。

    在 version 2.3.13 之前MaxRequestWorkers被称为MaxClients。旧的 name 仍然受支持。

    MaxSpareThreads 指令

    描述:最大 idle 线程数
    句法:MaxSpareThreads number
    默认:See usage for details
    Context:服务器配置
    状态:MPM
    模块:event,worker, mpm_netware, mpmtos2

    最大 idle 线程数。不同的 MPM 以不同的方式处理该指令。

    对于工人和事件,默认值为MaxSpareThreads 250。这些 MPM 以 server-wide 为基础处理 idle 线程。如果服务器中有太多的 idle 线程,则子进程将被终止,直到 idle 线程的数量小于此数量。如果启用了ListenCoresBucketsRatio,则可能会创建其他 processes/threads。

    对于mpm_netware,默认值为MaxSpareThreads 100。由于此 MPM 运行 single-process,备用线程计数也是 server-wide。

    mpmtos2的作用类似于mpm_netware。对于mpmtos2,默认 value 是10

    限制

    MaxSpareThreads value 的范围受到限制。 Apache httpd 将根据以下规则自动更正给定的 value:

    • mpm_netware希望 value 大于MinSpareThreads。
    • 对于工人和事件,value 必须大于或等于MinSpareThreads和ThreadsPerChild的总和。

    参见

    • MinSpareThreads
    • StartServers
    • MaxSpareServers

    MinSpareThreads 指令

    描述:可用于处理请求峰值的最小 idle 线程数
    句法:MinSpareThreads number
    默认:See usage for details
    Context:服务器配置
    状态:MPM
    模块:event,worker, mpm_netware, mpmtos2

    处理请求峰值的最小 idle 线程数。不同的 MPM 以不同的方式处理该指令。

    工人和事件使用MinSpareThreads 75的默认值并在 server-wide 基础上处理 idle 线程。如果服务器中没有足够的 idle 线程,则会创建子进程,直到 idle 线程的数量大于 number。如果启用了ListenCoresBucketsRatio,则可能会创建其他 processes/threads。

    mpm_netware使用默认值MinSpareThreads 10,因为它是一个 single-process MPM,所以在 server-wide 基础上跟踪它。

    mpmtos2的作用类似于mpm_netware。对于mpmtos2,默认 value 是5

    参见

    • MaxSpareThreads
    • StartServers
    • 比 MinSpareServers

    PidFile 指令

    描述:服务器记录守护程序的 process ID 的文件
    句法:PidFile filename
    默认:PidFile logs/httpd.pid
    Context:服务器配置
    状态:MPM
    模块:event,worker,prefork, mpm_winnt, mpmtos2

    PidFile指令设置服务器记录守护程序的 process id 的文件。如果文件名不是绝对的,则假定它相对于ServerRoot。

    PidFile /var/run/apache.pid
    

    能够向服务器发送信号通常很有用,这样它就会关闭,然后 re-opens 和TransferLog,这是通过向PidFile中列出的 process id 发送 SIGHUP(kill -1)信号来完成的。

    PidFile受_log 文件放置和安全的相同警告。

    注意

    从 Apache HTTP Server 2 开始,我们建议您仅使用脚本或 OS 提供的 init 脚本(re-)starting 或停止服务器)。

    ReceiveBufferSize 指令

    描述:TCP 接收缓冲区大小
    句法:ReceiveBufferSize bytes
    默认:ReceiveBufferSize 0
    Context:服务器配置
    状态:MPM
    模块:event,worker,prefork, mpm_winnt, mpm_netware, mpmtos2

    服务器将 TCP 接收缓冲区大小设置为指定的字节数。

    如果设置为0的 value,则服务器将使用 OS 默认值。

    ScoreBoardFile 指令

    描述:用于存储子进程的协调数据的文件的位置
    句法:ScoreBoardFile file-path
    默认:ScoreBoardFile logs/apache_runtime_status
    Context:服务器配置
    状态:MPM
    模块:event,worker,prefork, mpm_winnt

    Apache HTTP Server 使用记分板在其 parent 和子进程之间进行通信。某些体系结构需要一个文件来促进此通信。如果未指定文件,Apache httpd 首先尝试完全在 memory 中创建记分板(使用匿名共享 memory),如果失败,将尝试在磁盘上创建文件(使用 file-based shared memory)。指定此指令会导致 Apache httpd 始终在磁盘上创建该文件。

    ScoreBoardFile /var/run/apache_runtime_status
    

    File-based shared memory 对需要直接访问记分板的 third-party applications 非常有用。

    如果使用ScoreBoardFile,则可以通过将其放在 RAM 磁盘上来提高速度。但请注意,您应注意有关 log 文件放置和安全的相同警告。

    参见

    • 停止并重新启动 Apache HTTP Server

    SendBufferSize 指令

    描述:TCP 缓冲区大小
    句法:SendBufferSize bytes
    默认:SendBufferSize 0
    Context:服务器配置
    状态:MPM
    模块:event,worker,prefork, mpm_winnt, mpm_netware, mpmtos2

    将服务器的 TCP 发送缓冲区大小设置为指定的字节数。在高速,高延迟连接(i.e.,100ms 左右,例如横贯大陆的快速管道)上将其设置为超过 OS 的标准默认值值通常很有用。

    如果设置为0的 value,则服务器将使用 OS 提供的默认 value。

    可能需要进一步配置操作系统,以便在高速,高延迟连接上获得更好的性能。

    在某些操作系统上,除非将EnableSendfile设置为 OFF,否则可能无法看到由较大的SendBufferSize导致的 TCP 行为的更改。此交互仅适用于静态 files。

    ServerLimit 指令

    描述:可配置进程数的上限
    句法:ServerLimit number
    默认:See usage for details
    Context:服务器配置
    状态:MPM
    模块:event,worker,prefork

    对于预派生 MPM,此指令为 Apache httpd process 的生命周期设置MaxRequestWorkers的最大配置 value。对于工人和事件 MPM,此指令与将 ThreadLimit _set 一起为 Apache httpd process 的生存期设置了MaxRequestWorkers的最大配置 value。对于事件 MPM,此指令还定义了多少旧服务器进程可以保持 running 并完成处理打开的连接。任何在重新启动期间更改此指令的尝试都将被忽略,但在重新启动期间可以修改MaxRequestWorkers。

    使用此指令时必须特别小心。如果将ServerLimit设置为远高于所需的 value,则将分配额外的未使用的共享 memory。如果ServerLimit和MaxRequestWorkers都设置为高于系统可以处理的值,Apache httpd 可能无法启动或系统可能变得不稳定。

    使用预派生 MPM 时,仅当需要将MaxRequestWorkers设置为高于 256(默认值)时才使用此指令。不要将此指令的 value 设置为高于您可能想要设置MaxRequestWorkers的值。

    使用工人时,仅当MaxRequestWorkers和ThreadsPerChild设置需要 16 个以上的服务器进程(默认)时才使用此指令。不要将此指令的 value 设置为高于MaxRequestWorkers和ThreadsPerChild所需的服务器进程数。

    如果MaxRequestWorkers和ThreadsPerChild设置定义的 process 数加上正常关闭进程的数量超过 16 个服务器进程(默认值),则使用事件增加此指令。

    注意

    编译到服务器的ServerLimit 20000硬限制(对于预派生 MPM 200000)。这是为了避免由错别字引起的恶劣影响。要进一步增加它超过此限制,您需要修改 mpm 源文件中 MAX_SERVER_LIMIT 的 value 并重建服务器。

    参见

    • 停止并重新启动 Apache HTTP Server

    StartServers 指令

    描述:启动时创建的子服务器进程数
    句法:StartServers number
    默认:See usage for details
    Context:服务器配置
    状态:MPM
    模块:event,worker,prefork, mpmtos2

    StartServers指令设置启动时创建的子服务器进程数。由于根据负载动态控制进程数,(参见MinSpareThreads,MaxSpareThreads,比 MinSpareServers,MaxSpareServers)通常没有理由调整此参数。

    默认 value 不同于 MPM 到 MPM。工人和事件默认为StartServers 3;预派生默认为5; mpmtos2默认为2

    StartThreads 指令

    描述:启动时创建的线程数
    句法:StartThreads number
    默认:See usage for details
    Context:服务器配置
    状态:MPM
    模块:mpm_netware

    启动时创建的线程数。由于线程数是根据负载动态控制的(参见MinSpareThreads,MaxSpareThreads,比 MinSpareServers,MaxSpareServers),因此通常没有理由调整此参数。

    对于mpm_netware,默认值为StartThreads 50,并且由于只有一个 process,因此这是在启动时为请求提供服务时创建的线程总数。

    ThreadLimit 指令

    描述:设置每个子 process 的可配置线程数的上限
    句法:ThreadLimit number
    默认:See usage for details
    Context:服务器配置
    状态:MPM
    模块:event,worker, mpm_winnt

    该指令为 Apache httpd process 的生命周期设置了ThreadsPerChild的最大配置 value。任何在重新启动期间更改此指令的尝试都将被忽略,但是在重新启动期间可以修改ThreadsPerChild直到此指令的 value。

    使用此指令时必须特别小心。如果ThreadLimit设置为远高于ThreadsPerChild的 value,则将分配额外未使用的共享 memory。如果ThreadLimit和ThreadsPerChild都设置为高于系统可以处理的值,Apache httpd 可能无法启动或系统可能变得不稳定。对于 Apache httpd 的当前 run,不要将此指令的 value 设置为高于ThreadsPerChild的最大预测设置。

    当与mpm_winnt和64一起使用时,ThreadLimit的默认值为1920

    注意

    服务器中存在ThreadLimit 20000(或ThreadLimit 100000,,ThreadLimit 15000,mpm_winnt)的硬限制。这是为了避免由错别字引起的恶劣影响。要进一步增加它超过此限制,您需要修改 mpm 源文件中的 MAX_THREAD_LIMIT 的 value 并重建服务器。

    ThreadsPerChild 指令

    描述:每个子 process 创建的线程数
    句法:ThreadsPerChild number
    默认:See usage for details
    Context:服务器配置
    状态:MPM
    模块:event,worker, mpm_winnt

    该指令设置每个子 process 创建的线程数。孩子在启动时创建这些线程,永远不会创建更多。如果使用像mpm_winnt这样的 MPM,其中只有一个子 process,这个数字应该足够高,以处理服务器的整个负载。如果使用像工人这样的 MPM,其中有多个子进程,则线程总数应足够高,以处理服务器上的 common 负载。

    当与mpm_winnt和25一起使用时,ThreadsPerChild的默认值为64

    ThreadsPerChild的 value 不能超过将 ThreadLimit的 value。如果配置了更高的 value,它将在 start-up 处自动缩小,并将记录警告。这两个指令之间的关系在将 ThreadLimit中解释。

    ThreadStackSize 指令

    描述:处理 client 连接的线程使用的堆栈大小(以字节为单位)
    句法:ThreadStackSize size
    默认:65536 on NetWare; varies on other operating systems
    Context:服务器配置
    状态:MPM
    模块:event,worker, mpm_winnt, mpm_netware, mpmtos2
    兼容性:可在 Apache HTTP Server 2.1 及更高版本中使用

    ThreadStackSize指令设置处理 client 连接和调用模块以帮助处理这些连接的线程的堆栈(用于自动数据)的大小。在大多数情况下,堆栈大小的操作系统默认值是合理的,但在某些情况下可能需要调整:

    • 在具有相对较小的默认线程堆栈大小(e.g.,HP-UX)的平台上,Apache httpd 在使用一些使用相对大量自动数据存储的 third-party 模块时可能会崩溃。那些相同的模块可能在默认线程堆栈大小较大的其他平台上运行良好。通过将ThreadStackSize设置为高于操作系统默认值的 value 来解决此类崩溃。仅当 third-party 模块的提供程序指定它是必需的,或者如果 Apache httpd 崩溃的诊断指示线程堆栈大小太小,则此类调整是必需的。
    • 在默认线程堆栈大小远远大于 web 服务器 configuration 所需的平台上,如果ThreadStackSize设置为低于操作系统默认值的 value,则每个子 process 的线程数可以更多。这种类型的调整只应在允许完整的 web 服务器处理集的测试环境中进行,因为可能存在需要更多堆栈来处理的不频繁请求。所需的最小堆栈大小很大程度上取决于所使用的模块,但 web 服务器 configuration 中的任何更改都可能使当前的ThreadStackSize设置无效。
    • 在 Linux 上,此指令只能用于增加默认堆栈大小,因为底层系统调用使用 value 作为最小堆栈大小。ulimit -s(通常较大)的软限制(如果无限制,则为 8MB)用作默认堆栈大小。

    除非需要每个子 process 的大量线程,否则建议不要减少ThreadStackSize。在某些平台(包括 Linux)上,128000 的设置已经太低,导致某些 common 模块崩溃。

    上篇:Apache核心功能

    下篇:mpm_event