请确保包含的目录中不包含任何诸如编辑器临时文件等引起误导的文件,因为Apache会尝试着读取它们并把其中的内容作为配置指令来处理,这样可能会导致启动过程的失败。运行apachectl configtest将会把配置检查时所使用的所有文件列出来以供参考。
root@host# apachectl configtest
Processing config directory: /usr/local/apache/conf/vhosts
Processing config file: /usr/local/apache/conf/vhosts/vhost1
Processing config file: /usr/local/apache/conf/vhosts/vhost2
Syntax OK
这将有助于检验配置中是否仅包含了您所希望出现那些文件。
参见
apachectl
KeepAlive 指令
说明: 启用HTTP持续作用
语法: KeepAlive on|off
默认值: KeepAlive On
上下文: 服务器配置, 虚拟主机
状态: 核心
模块: core
持续作用扩展自HTTP/1.0和HTTP/1.1的长连接特性。提供了长效的HTTP会话,用以在同一个TCP连接中进行多次请求。在某些情况下,这样的方式会对包含大量图片的HTML文档造成的延时起到50%的加速作用。在Apache 1.2版本以后,您可以设置KeepAlive On以启用持续作用。
对于HTTP/1.0的客户端来说,仅当客户端指定使用的时候才会使用持续作用连接。此外,仅当能够预先知道传输的内容长度时,才会与HTTP/1.0的客户端建立持续作用连接。这意味着那些变长的内容,诸如CGI输出、SSI页面、以及服务器端生成的目录列表等内容一般来说将无法使用与HTTP/1.0客户端建立的持续作用连接。而对于HTTP/1.1的客户端来说,如果没有进行特殊指定,长连接将是默认的连接方式。如果客户端进行了请求,将使用分块编码以解决在长连接里发送未知长度内容的问题。
参见
MaxKeepAliveRequests
KeepAliveTimeout 指令
说明: 持续作用中服务器在两次请求之间等待的时间数
语法: KeepAliveTimeout 秒数
默认值: KeepAliveTimeout 15
上下文: 服务器配置, 虚拟主机
状态: 核心
模块: core
Apache在关闭连接前等待下一次请求的时间。一旦收到一个请求,超时值将会被设置为Timeout指令指定的值。
对于高负荷的服务器来说,把KeepAliveTimeout设置成一个比较大的值会导致一些性能方面的问题:超时值越大,与空闲客户端保持连接的服务器进程越多。
<Limit> 指令
说明: 限定访问控制仅施用于某些特定的HTTP方法
语法: <Limit 方法 [方法] ... > ... </Limit>
上下文: 服务器配置, 虚拟主机, 目录, .htaccess
覆盖项: All
状态: 核心
模块: core
访问控制一般来说是对所有的访问方法都生效的,这也是我们普遍希望达到的效果。一般情况下,访问控制指令不应该放入<limit>配置段中。
<Limit>指令的目的是限制访问控制的效果使其仅施用于某些HTTP方法。对于其它方法,<Limit>括号中的访问限制将不起任何作用。下例中的访问控制仅施用于POST,PUT和DELETE方法,其它方法不受任何影响:
<Limit POST PUT DELETE>
Require valid-user
</Limit>
列出的方法名可为下列的一个或多个:GET,POST,PUT,DELETE,CONNECT,OPTIONS,TRACE,PATCH,PROPFIND,PROPPATCH,MKCOL,COPY,MOVE,LOCK,和UNLOCK。方法名是大小写敏感的。如果使用了GET的定义,它会同时限制HEAD请求。
<LimitExcept> 指令
说明: 对除了指定以外的所有HTTP方法限定访问控制。
语法: <LimitExcept 方法 [方法] ... > ... </LimitExcept>
上下文: 服务器配置, 虚拟主机, 目录, .htaccess
覆盖项: All
状态: 核心
模块: core
<LimitExcept>和</LimitExcept>用于封装一组访问控制指令,并将其施用于所有未在参数中标出的HTTP访问方法。也就是说,与<Limit>相反,它用于控制标准的和非标准/无法辨识的方法。参阅<Limit>文档获取详情。
比如说:
<LimitExcept POST GET>
Require valid-user
<LimitExcept>
LimitRequestBody 指令
说明: 限制客户端发送的HTTP请求体的总长度
语法: LimitRequestBody 字节数
默认值: LimitRequestBody 0
上下文: 服务器配置, 虚拟主机, 目录, .htaccess
覆盖项: All
状态: 核心
模块: core
此指令在0(意味着无限制)到2147483647(2GB)间限制了请求体所允许的字节数。默认值在编译期以常量DEFAULT_LIMIT_REQUEST_BODY定义(发布值为0)。
LimitRequestBody指令允许用户在给予指令的内容里(服务器、每个目录、每个文件或是每个位置)对一个HTTP请求的消息体设置一个大小限制。如果客户端的请求超出了这个限制,服务器会回报一个错误而不是伺服这个请求。一个普通请求的信息体在很大程度上取决于资源和这个资源允许的方法。CGI脚本经常用消息体把表单的信息传递给服务器。使用PUT方法至少会需要与服务器期望从这个资源得到的信息量差不多大小的值。
此指令给了服务器管理员更大的可控性以控制客户端不正常的请求行为。这有助于避免某些形式的拒绝服务攻击。
比如说,如果您允许文件上传到某个位置,而且希望能将上传文件的大小设置为100K,您可以使用下面的指令:
LimitRequestBody 102400
LimitRequestFields 指令
说明: 限制接受客户端请求中HTTP请求头域的数量
语法: LimitRequestFields 数量
默认值: LimitRequestFields 100
上下文: 服务器配置
状态: 核心
模块: core
数量是一个0(意味着不限)到32767之间的整数。默认值为编译期中的常量DEFAULT_LIMIT_REQUEST_FIELDS所指定(发布值为100)。
LimitRequestFields指令允许服务器管理员修改在一个HTTP请求中的请求头域的数量限制。服务器需要此值大于一个普通客户端请求中包含头域的数量。一个客户端请求头域的数量很少大于20,但根据客户端的不同这个数字有很大的差别,经常取决于用户配置他们的浏览器扩展以支持更详细的内容协商(content negotiation)。可选的HTTP扩展经常使用请求头域来实现。
此指令给了服务器管理员更大的可控性以控制客户端不正常的请求行为。这有助于避免某些形式的拒绝服务攻击。如果正常使用的客户端得到了服务器的错误回应,指出其在请求中发送了过多的头域,您应该适当的增大此值。
举例如下:
LimitRequestFields 50
LimitRequestFieldSize 指令
说明: 限制客户端发送的请求头的大小
语法: LimitRequestFieldsize 字节数
默认值: LimitRequestFieldsize 8190
上下文: 服务器配置
状态: 核心
模块: core
此指令指定了一个HTTP请求头允许的大小。其字节数的取值范围为0到编译期常量DEFAULT_LIMIT_REQUEST_FIELDSIZE的值(发布值为8190)。
LimitRequestFieldsize指令允许服务器管理员在服务器编译时设定的输入缓冲大小的范围之下降低关于HTTP请求头域大小的限制。一般来说,服务器需要此值足够大,以适应普通客户端的任何请求的头域大小。一个普通头域的大小对于不同的客户端来说是有着很大差别的,一般与用户配置他们的浏览器以支持更多的内容协议密切相关。
此指令给了服务器管理员更大的可控性以控制客户端不正常的请求行为。这有助于避免某些形式的拒绝服务攻击。
举例如下:
LimitRequestFieldSize 16380
一般情况下,请不要改变这个设置,而是保持其默认设置。
LimitRequestLine 指令
说明: 限制接受客户端发送的HTTP请求的行数大小
语法: LimitRequestLine 字节数
默认值: LimitRequestLine 8190
上下文: 服务器配置
状态: 核心
模块: core
此指令将设置HTTP请求行的字节数限制在0到编译期常量DEFAULT_LIMIT_REQUEST_LINE(发布值为8190)之间。
LimitRequestLine指令允许服务器管理员在服务器编译时设定的输入缓冲大小的范围之下降低客户端HTTP请求行允许大小的限制。因为请求行包括HTTP方法、URI和协议版本,所以LimitRequestLine指令会加限制于涉及服务器的请求URI的长度。服务器会需要这个值足够大以装载它所有的资源名,包括可能在GET请求中所传递的查询部分的所有信息。
此指令给了服务器管理员更大的可控性以控制客户端不正常的请求行为。这有助于避免某些形式的拒绝服务攻击。
举例如下:
LimitRequestLine 16380
一般情况下,不需要改变此设置的默认值。
LimitXMLRequestBody 指令
说明: 限制基于XML的请求体的大小
语法: LimitXMLRequestBody 数值
默认值: LimitXMLRequestBody 1000000
上下文: 服务器配置, 虚拟主机, 目录, .htaccess
覆盖项: All
状态: 核心
模块: core
限制基于XML的请求体大小的最大值(以字节为单位),0将禁用这一检查。
比如说:
LimitXMLRequestBody 0
<Location> 指令
说明: 将封装的指令施用于匹配的URL
语法: <Location URL-path|URL> ... </Location>
上下文: 服务器配置, 虚拟主机
状态: 核心
模块: core
<Location>提供了基于URL的访问控制。与<Directory>指令类似,它也会启用一个以</Location>结尾的子配置段。<Location>配置段的处理位于<Directory>配置段和.htaccess文件读入以及<Files>配置段之后,并依照在配置文件中出现的顺序进行处理。
请注意:URL根本不必与文件系统一起排列,必须强调的是,<Location>的操作完全在文件系统以外。
对所有的初始(非代理)请求来说,匹配的URL应该是具有/path/形式的URL路径。不包括访问方法、主机名、端口或查 询字串等。对于代理的请求,匹配的URL必须为 scheme://servername/path的形式,而且必须包括前缀。
URL可以用一个通配符字串来进行通配符的处理。‘?’匹配任何单个的字符,而‘*’匹配所有字符序列。
也可以使用扩展的正则表达式,附加~字符来进行说明。 例如:
<Location ~ "/(extra|special)/data">
将匹配所有包含字串"/extra/data"或"/special/data"的URL。在Apache 1.3及其后续版本中,加入了一个新的<LocationMatch>命令,其功能与<Location>的正则表达式版本相同。
<Location>的功能在与SetHandler指令联用时发挥最大效能。比如说启用状态请求,但仅对foo.com的浏览器起效,您可以这样使用:
<Location /status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from .foo.com
</Location>
请注意 / (斜线)
斜线字符根据它在URL中出现的位置不同有着特殊的意义。大家可能都已经习惯在文件系统中,多个毗邻的斜线会被作为单一的斜线处理(例如/home///foo与/home/foo相同)。但在URL里面,这样是行不通的。<LocationMatch>指令和正则表达式版本的<Location>要求您根据您的目的明确的使用多重斜线。比如说<LocationMatch ^/abc>将匹配请求URL/abc但不会匹配请求URL//abc。而非正则表达式版本的<Location>指令在用于代理请求时,也有类似表现。但当非正则表达式版本的<Location>用于非代理请求时,它会将多个毗邻的斜线认作单个斜线。比如说,如果您指定了<Location /abc/def>而请求是指向/abc//def的,那么它们就是匹配的。
参见
Directory、Location和Files配置段是如何工作的中包含了当接受一个请求时,这些不同的配置段是如何组合工作的相关解释。
<LocationMatch> 指令
说明: 将封装的指令施用于匹配正则表达式的URL
语法: <LocationMatch 正则表达式> ... </Location>
上下文: 服务器配置, 虚拟主机
状态: 核心
模块: core
<LocationMatch>与<Location>指令相同,提供了基于URL的访问控制。但它使用正则表达式作为参数,而不是简单字符串。比如说:
<LocationMatch "/(extra|special)/data">
将匹配包含子串"/extra/data"或"/special/data"的URL。
参见
Directory、Location和Files配置段是如何工作的中包含了当接受一个请求时,这些不同的配置段是如何组合工作的相关解释。
LogLevel 指令
说明: 控制错误日志的详细程度
语法: LogLevel 级别
默认值: LogLevel warn
上下文: 服务器配置, 虚拟主机
状态: 核心
模块: core
LogLevel用于调整记于错误日志中的信息的详细程度。(参阅ErrorLog指令)。可以选择下列级别,依照重要性降躜排列:
Level Description Example
emerg 紧急 - 系统无法使用。 "Child cannot open lock file. Exiting"
alert 必须立即采取措施。 "getpwuid: couldn't determine user name from uid"
crit 致命情况。 "socket: Failed to get a socket, exiting child"
error 错误情况。 "Premature end of script headers"
warn 警告情况。 "child process 1234 did not exit, sending another SIGHUP"
notice 一般重要情况。 "httpd: caught SIGBUS, attempting to dump core in ..."
info 普通信息。 "Server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers)..."
debug 出错级别信息 "Opening config file ..."
当指定了特定级别时,所有级别高于它的信息也会同时报告。比如说,当指定了LogLevel info时,所有 notice和warn级别的信息也会被记录。
建议至少要使用crit级别。
示例如下:
LogLevel notice
MaxKeepAliveRequests 指令
说明: 一个长连接中允许的请求数量
语法: MaxKeepAliveRequests 数量
默认值: MaxKeepAliveRequests 100
上下文: 服务器配置, 虚拟主机
状态: 核心
模块: core
MaxKeepAliveRequests指令限制了当启用KeepAlive时,每连接允许的请求数量。如果将此值设为"0",将不限制请求的数目。我们建议最好将此值设为一个比较大的值,以确保最优的服务器性能。
示例如下:
MaxKeepAliveRequests 500
NameVirtualHost 指令
说明: 为一个基于域名的虚拟主机指定一个IP地址
语法: NameVirtualHost 地址[:端口]
上下文: 服务器配置
状态: 核心
模块: core
如果您要配置基于域名的虚拟主机,NameVirtualHost指令就是您必须的指令之一。
尽管地址参数可以使用主机名,但建议您还是使用IP地址。比如说:
NameVirtualHost 111.22.33.44
使用NameVirtualHost指令,您可以指定一个基于域名的虚拟主机将使用哪个IP地址来接受请求。在一个防火墙或是其它代理接受了请求并把它转到服务器所在的另外一个IP地址上的情况下,您必须指定伺服请求的机器物理界面上的IP地址。如果您对于多个地址使用了多个基于域名的虚拟主机,您应该为每个地址使用此指令。
请注意:“主服务器”和任何其它默认服务器都不会伺服发送到NameVirtualHostIP地址的请求。(除非在某些情况下,您指定了NameVirtualHost但没有为这个地址指定任何虚拟主机)。
另外,您还可以为您使用的基于域名的虚拟主机指定一个端口号。 比如说:
NameVirtualHost 111.22.33.44:8080
IPv6地址必须封装在一对方括号内,如下例所示:
NameVirtualHost [fe80::a00:20ff:fea7:ccea]:8080
为接受所有界面的请求,您可以使用参数*
NameVirtualHost *
<VirtualHost>指令的参数
请注意<VirtualHost>指令的参数必须与NameVirtualHost指令的参数完全匹配。
NameVirtualHost 1.2.3.4
<VirtualHost 1.2.3.4>
...
</VirtualHost>
参见
参阅:虚拟主机文档
Options 指令
说明: 配置在特定目录使用哪些特性
语法: Options [+|-]可选项 [[+|-]可选项] ...
默认值: Options All
上下文: 服务器配置, 虚拟主机, 目录, .htaccess
覆盖项: Options
状态: 核心
模块: core
Options指令控制了在特定目录中将使用哪些服务器特性。
可选项能设置为None,在这种情况下,将不启用任何额外特性。或设置为以下选项中的一个或多个:
All
除MultiViews之外的所有特性。这是默认设置。
ExecCGI
允许执行CGI脚本.
FollowSymLinks
服务器会在此目录中使用符号连接。
注意:即便服务器会使用符号连接,但它不会改变用于匹配<Directory>配置段的路径名。
注意:如果此配置位于<Location>配置段中,则此设置会被忽略。
Includes
允许服务器端包含。
IncludesNOEXEC
允许服务器端包含,但禁用#exec命令和#exec CGI。但仍可以从ScriptAliase目录使用#include 虚拟CGI脚本。
Indexes
如果一个映射到目录的URL被请求,而此目录中又没有DirectoryIndex(例如:index.html),那么服务器会返回一个格式化后的目录列表。
MultiViews
允许内容协商的多重视图。
SymLinksIfOwnerMatch
服务器仅在符号连接与其目的目录或文件拥有者具有同样的用户id时才使用它。
注意:如果此配置出现在<Location>配置段中,此选项将被忽略。
一般来说,如果一个目录被多次设置了Options,则最特殊的一个会被完全接受,而各个可选项的设定彼此并不融合。然而,如果所有施用于Options指令的可选项前都加有+或-符号,此可选项将被合并。所有前面加有+号的可选项将强制覆盖当前可选项设置,而所有前面有-号的可选项将强制从当前可选项设置中去除。
比如说,没有任何+和-符号:
<Directory /web/docs>
Options Indexes FollowSymLinks
</Directory>
<Directory /web/docs/spec>
Options Includes
</Directory>
则只有Includes设置到/web/docs/spec目录上。然而如果第二个Options指令使用了+和-符号:
<Directory /web/docs>
Options Indexes FollowSymLinks
</Directory>
<Directory /web/docs/spec>
Options +Includes -Indexes
</Directory>
那么就会有FollowSymLinks和Includes设置到/web/docs/spec目录上。
请注意:使用-IncludesNOEXEC或是-Includes时,不论前面如何设置,都会完全禁用服务器端包含。
没有其它设置时,默认设置为All。
Require 指令
说明: 选择哪个认证用户能访问某个资源
语法: Require entity-name [entity-name] ...
上下文: 目录, .htaccess
覆盖项: AuthConfig
状态: 核心
模块: core
此指令选择那个认证用户能访问一个目录。其语法如下:
Require user userid [userid] ...
只有指定的用户可以访问此目录。
Require group group-name [group-name] ...
只有隶属于指定用户组的用户可以访问此目录。
Require valid-user
所有有效用户都可以访问此目录。
Require必须伴随AuthName和AuthType指令,以及诸如AuthUserFile和AuthGroupFile(用以定义用户和用户组)以确保其能够正确工作。例如:
AuthType Basic
AuthName "Restricted Directory"
AuthUserFile /web/users
AuthGroupFile /web/groups
Require group admin
使用这种方法施用的访问控制对所有方法都有效。 这是一般情况下期望达到的效果。如果您仅希望对某个特定的方法加以限制,而不涉及其它方法时,您可以将Require语句放入<Limit>配置段中。
参见
Satisfy
mod_access
RLimitCPU 指令
说明: 限制由Apache载入的子进程的CPU占用
语法: RLimitCPU 数值|max [数值|max]
默认值: 未定义,使用操作系统默认值
上下文: 服务器配置, 虚拟主机, 目录, .htaccess
覆盖项: All
状态: 核心
模块: core
使用一个或两个参数。第一个参数设置了所有进程的软资源限制,第二个参数设置了最大资源限制。两个参数均可设置为一个数值或是max以表示服务器的限制设置为操作系统允许的最大值。增大此资源限制最大值蹊要以root运行服务器或是在初始化启动语句中进行设置。
这个限制将施于Apache子服务请求衍生出的进程,而不是Apache子进程本身。这个范围包括CGI脚本和SSI执行命令,但不包括所有从Apache父进程衍生出的进程。比如说管道日志。
CPU资源限制表示为每进程占用的秒数。
参见
RLimitMEM
RLimitNPROC
RLimitMEM 指令
说明: 限制由Apache载入的子进程的内存占用
语法: RLimitMEM 数值|max [数值|max]
默认值: 未定义,使用操作系统默认值
上下文: 服务器配置, 虚拟主机, 目录, .htaccess
覆盖项: All
状态: 核心
模块: core
使用一个或两个参数。第一个参数设置了所有进程的软资源限制,第二个参数设置了最大资源限制。两个参数均可设置为一个数值或是max以表示服务器的限制设置为操作系统允许的最大值。增大此资源限制最大值蹊要以root运行服务器或是在初始化启动语句中进行设置。
这个限制将施于Apache子服务请求衍生出的进程,而不是Apache子进程本身。这个范围包括CGI脚本和SSI执行命令,但不包括所有从Apache父进程衍生出的进程。比如说管道日志。
内存资源限制表示为每进程占用的字节数。
参见
RLimitCPU
RLimitNPROC
RLimitNPROC 指令
说明: 限制由Apache载入的子进程的进程载入数目
语法: RLimitNPROC 数值|max [数值|max]
默认值: 未定义,使用操作系统默认值
上下文: 服务器配置, 虚拟主机, 目录, .htaccess
覆盖项: All
状态: 核心
模块: core
使用一个或两个参数。第一个参数设置了所有进程的软资源限制,第二个参数设置了最大资源限制。两个参数均可设置为一个数值或是max以表示服务器的限制设置为操作系统允许的最大值。增大此资源限制最大值蹊要以root权限运行服务器或是在初始化启动语句中进行设置。
这个限制将施于Apache子服务请求衍生出的进程,而不是Apache子进程本身。这个范围包括CGI脚本和SSI执行命令,但不包括所有从Apache父进程衍生出的进程。比如说管道日志。
进程限制控制了每用户的进程数。
请注意:如果CGI进程不是以web服务器的userid启动的,那么此指令将限制服务器自己能够创建的进程数目。此种情况将在错误日志中以无法创建进行记录。
参见
RLimitMEM
RLimitCPU
Satisfy 指令
说明: 主机级别的访问控制和用户认证之间的关系
语法: Satisfy any|all
默认值: Satisfy all
上下文: 目录, .htaccess
覆盖项: AuthConfig
状态: 核心
模块: core
在同时使用Allow和Require同时使用时的访问策略。参数可以设置为'all'或者'any'。此指令仅在某个特定区域的访问权限同时被用户名/密码和客户端、主机地址进行限定的时候起作用。默认行为("all")采取客户端首先通过地址访问限制并输入有效的用户名和密码的方式。使用可选项"any"将使客户端在通过主机限制或是输入一个有效的用户名和密码两种方式之一得到访问权限。这样,就可以通过密码来限制一个区域的访问,但允许某些特定地址的客户端访问时不需要输入密码。
比如说,如果您想让您局域网内的用户访问您的web网站时不受限制,但局域网外的用户需提供密码才能进行访问,您可以采取类似如下的配置:
Require valid-user
Allow from 192.168.1
Satisfy any
参见
Allow
Require
ScriptInterpreterSource 指令
说明: 定位CGI脚本解释器的技术
语法: ScriptInterpreterSource 注册表项|脚本
默认值: ScriptInterpreterSource 脚本
上下文: 服务器配置, 虚拟主机, 目录, .htaccess
覆盖项: FileInfo
状态: 核心
模块: core
兼容性: 仅用于Win32
此指令用于控制Apache如何找到运行CGI脚本所需的解释器。默认使用的技术是在脚本中以#!行指定的解释器。设置ScriptInterpreterSource registry将使用脚本文件扩展名(比如说.pl)作为搜索项对Windows注册表进行搜索。
ServerAdmin 指令
说明: 服务器返回给客户端的错误信息中包含的邮件地址
语法: ServerAdmin 邮件地址
上下文: 服务器配置, 虚拟主机
状态: 核心
模块: core
ServerAdmin设置了在所有返回给客户端的错误信息中包含的邮件地址。
您为这个目的专门设置一个邮箱是值得的比如说:
ServerAdmin www-admin@foo.bar.com
因为用户一般不会注意到他们在讨论服务器的问题!
ServerAlias 指令
说明: 匹配一个基于域名的虚拟主机的候补域名
语法: ServerAlias 主机名 [主机名] ...
上下文: 虚拟主机
状态: 核心
模块: core
ServerAlias指令与基于域名的虚拟主机联用,设定主机的候补域名。
<VirtualHost *>
ServerName server.domain.com
ServerAlias server server2.domain.com server2
...
</VirtualHost>
参见
Apache Virtual Host documentation
ServerName 指令
说明: 服务器用于辨识自己的主机名和端口号
语法: ServerName 完整的域名[:端口号]
上下文: 服务器配置, 虚拟主机
状态: 核心
模块: core
兼容性: 在2.0版中,此指令代替了1.3版的Port指令的功能。
ServerName指令设置了服务器用于辨识自己的主机名和端口号。这主要用于创建转向URL。比如说,一个放置web服务器的主机域名为simple.example.com,但同时有一个DNS别名www.example.com。而您希望web服务器更显著一点,您可以使用如下的指令:
ServerName www.example.com:80
当没有指定ServerName时,服务器会尝试着对IP地址进行反向查询来推出主机名。如果在服务器名中没有指定端口号,服务器会使用接受请求的那个端口。为了加强可靠性和可预测性,您应该使用ServerName显式的指定一个主机名和端口号。
如果您正在使用基于域名的虚拟主机,在<VirtualHost>配置段中的ServerName将指定为了匹配这个虚拟主机,在请求的Host:头中必须出现的主机名。
请参阅UseCanonicalName指令以获得关于自指示(self-referential)URL(比如说,使用mod_dir模块)是需要指定一个特定端口,还是使用客户端请求的端口号的更详细的信息。
参见
DNS相关资讯
Apache虚拟主机文档
UseCanonicalName
NameVirtualHost
ServerAlias
ServerPath 指令
说明: 为兼容性不好的浏览器访问基于域名的虚拟主机保留的URL路径名
语法: ServerPath URL-path
上下文: 虚拟主机
状态: 核心
模块: core
ServerPath指令为主机设置了保守的(legacy)URL路径名,用于和基于域名的虚拟主机配合使用。
参见
Apache虚拟主机文档
ServerRoot 指令
说明: 服务器安装基础目录
语法: ServerRoot 目录路径
默认值: ServerRoot /usr/local/apache
上下文: 服务器配置
状态: 核心
模块: core
ServerRoot指令设置了服务器存在的目录。一般来说它将包含conf/和logs/子目录。其它配置文件的相对路径即基于此目录。
举例如下
ServerRoot /home/httpd
参见
httpd的-d参数
如何正确设置ServerRoot的权限的安全提示
ServerSignature 指令
说明: 配置服务器生成页面的页脚
语法: ServerSignature On|Off|EMail
默认值: ServerSignature Off
上下文: 服务器配置, 虚拟主机, 目录, .htaccess
覆盖项: All
状态: 核心
模块: core
ServerSignature指令允许您配置服务器端生 成文档的页脚(错误信息、mod_proxy的ftp目录列表、mod_info的输出)。您启用这个页脚的原因主要在于处于一个代理服务器链中的时候,用户基本无法辨识出究竟是链中的哪个服务器真正产生了返回的错误信息。
默认的Off设定没有错误行(这样便与Apache 1.2及更旧版本兼容)。采用On会简单的增加一行关于服务器版本和正在伺服的虚拟主机的ServerName,而EMail设置会如文档中说明的那样额外创建一个指向ServerAdmin的"mailto:"部分。
参见
ServerTokens
ServerTokens 指令
说明: 配置服务器HTTP回应头
语法: ServerTokens Major|Minor|Minimal|ProductOnly|OS|Full
默认值: ServerTokens Full
上下文: 服务器配置
状态: 核心
模块: core
此指令控制了Server回送给客户端的回应头域是否包含关于服务器OS类型和编译进的模块描述信息。
ServerTokens Prod[uctOnly]
服务器会发送(比如说):Server:Apache
ServerTokens Major
服务器会发送(比如说):Server:Apache/2
ServerTokens Minor
服务器会发送(比如说):Server:Apache/2.0
ServerTokens Min[imal]
服务器会发送(比如说):Server:Apache/2.0.41
ServerTokens OS
服务器会发送(比如说):Server: Apache/2.0.41 (Unix)
ServerTokens Full (or not specified)
服务器会发送(比如说):Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2
此设置将施用与整个服务器,而且不能在虚拟主机的管理层次上予以启用或禁用。
参见
ServerSignature
SetHandler 指令
说明: 强制所有匹配文件被一个处理器处理
语法: SetHandler 处理器名
上下文: 服务器配置, 虚拟主机, 目录, .htaccess
覆盖项: FileInfo
状态: 核心
模块: core
兼容性: 在Apache 2.0中移入核心
当此指令放入.htaccess文件或是<Directory>、 <Location>配置段中时,此指令将强制所有匹配的文件通过处理器名指定的处理器来解析。比如说:如果有一个目录,您想不管其中的文件有怎么样的扩展名,都将它作为图像映射规则文件来解析,您可以将下例放入那个目录的.htaccess文件中:
SetHandler imap-file
再来一个例子:如果您想当http://servername/status被请求时,服务器显示一个状态报告,您可以将下面的语句放入httpd.conf里面:
<Location /status>
SetHandler server-status
</Location>
参见
AddHandler
SetInputFilter 指令
说明: 设置处理客户端请求和POST输入时使用的过滤器
语法: SetInputFilter 过滤器[;过滤器...]
上下文: 服务器配置, 虚拟主机, 目录, .htaccess
覆盖项: FileInfo
状态: 核心
模块: core
SetInputFilter指令为服务器接受并处理客户端请求和POST输入设置了过滤器。这是在其它地方设置的包括AddInputFilter指令在内的过滤器的外加过滤器。
如果设置了多于一个的过滤器,它们必须按照处理内容的顺序用分号分隔。
参见
过滤器文档
SetOutputFilter 指令
说明: 设置用于处理服务器回应的过滤器
语法: SetOutputFilter 过滤器[;过滤器...]
上下文: 服务器配置, 虚拟主机, 目录, .htaccess
覆盖项: FileInfo
状态: 核心
模块: core
SetOutputFilter指令设置了用于在服务器回应发送到客户端之前使用的过滤器。这是在其它地方设置的包括AddInputFilter指令在内的过滤器的外加过滤器。
例如:下述配置将会把/www/data/目录下的所有文件作为服务器端包含文件来处理。
<Directory /www/data/>
SetOutputFilter INCLUDES
</Directory>
如果设置了多于一个的过滤器,它们必须按照处理内容的顺序用分号分隔。
参见
过滤器文档
TimeOut 指令
说明: 对于某些事件,服务器在断定请求失败前等待的时间
语法: TimeOut 数字
默认值: TimeOut 300
上下文: 服务器配置
状态: 核心
模块: core
TimeOut指令现用于设置Apache在等待以下三种事件的时间长度:
接受一个GET请求耗费的总时间。
POST或PUT请求时,接受两个TCP包之间的时间。
回应时TCP包传输中两个ACK包之间的时间。
我们计划在发展里程中,逐步把它们分别变得更易配置。计时器在1.2版本之前的默认值为1200,而现在已经设置为300了,但对于绝大多数情况来说仍是足够的。没有把它默认值设的更小的原因在于代码里还有点问题:有时发送一个包之后,计时器没有复位。
UseCanonicalName 指令
说明: 配置服务器如何决定它自己的域名和端口
语法: UseCanonicalName on|off|dns
默认值: UseCanonicalName on
上下文: 服务器配置, 虚拟主机, 目录
状态: 核心
模块: core
在很多情况下,Apache必须构建一个自指向URL——即一个指回相同服务器的URL。使用UseCanonicalName onApache将会使用ServerName指令中指定的主机名和端口号来构建服务器的标准域名。这个域名将用于所有的自指向URL、SERVER_NAME和CGI中SERVER_PORT的取值。
设置为UseCanonicalName off时,如果客户端提供了相关信息(否则,将如上所述使用标准域名),Apache将会使用这些信息来构建自指向URL。这些值与基于域名的虚拟主机对于同样的客户端实现的相同。CGI变量SERVER_NAME和SERVER_PORT也会由客户端提供的值来构建。
用这样的方式成功解决问题的例子如下:在一个局域网内,您想让连接主机的用户使用诸如www这样的短域名进行访问。您会注意到,如果用户键入了类似http://www/splat这样的一个短域名和一个目录的URL,而没有最后的斜线,Apache会将他们转向到http://www.domain.com/splat/。如果您在这个目录上启用了鉴权,这会导致用户必须进行两次验证(一次针对www而另外一次针对www.domain.com——参阅关于此主题的FAQ获得更多信息)。但如果UseCanonicalName设为off,Apache就会转向到http://www/splat/。
第三个可选项是UseCanonicalName DNS,用于为大量基于IP的虚拟主机支持那些老土的不提供Host:头的浏览器使用。使用这个可选项时,Apache将对有客户端连入的服务器的IP地址进行反向DNS查询,以构建自指向URL。
警告:如果CGI对SERVER_NAME的值作出了假定,它们会被此可选项破坏。客户端对于给出它们想要的主机名这样的行动是完全不受限制的。但如果CGI仅使用SERVER_NAME来构建自指向的URL,它们会工作的很好。
参见
ServerName
Listen
<VirtualHost> 指令
说明: 包含仅施用于指定主机名或IP地址的指令
语法: <VirtualHost 地址[:端口号] [地址[:端口号]] ...> ... </VirtualHost>
上下文: 服务器配置
状态: 核心
模块: core
<VirtualHost>和</VirtualHost>用于封装一组仅施用于特定虚拟主机的指令。任何在虚拟主机配置中可以使用的指令也同样可以在这里使用。当服务器接受了一个特定虚拟主机的文档请求时,它会使用封装在<VirtualHost>配置段中的指令。地址可以是
虚拟主机的IP地址;
虚拟主机IP地址对应的完整域名;
字符*,仅与NameVirtualHost *配合使用以匹配所有 的IP地址;或是
字符串_default_,与基于IP的虚拟主机联用以捕获所 有没有匹配的IP地址。
示例
<VirtualHost 10.1.2.3>
ServerAdmin webmaster@host.foo.com
DocumentRoot /www/docs/host.foo.com
ServerName host.foo.com
ErrorLog logs/host.foo.com-error_log
TransferLog logs/host.foo.com-access_log
</VirtualHost>
IPv6的地址必须放入方括号中指定,否则作为可选项的端口号将无法确定。一个IPv6的示例如下:
<VirtualHost [fe80::a00:20ff:fea7:ccea]>
ServerAdmin webmaster@host.foo.com
DocumentRoot /www/docs/host.foo.com
ServerName host.foo.com
ErrorLog logs/host.foo.com-error_log
TransferLog logs/host.foo.com-access_log
</VirtualHost>
每个虚拟主机必须对应不同的IP地址、端口号或是不同的主机名。在第一种情况下,服务器所在物理机器必须配置为可以为多个地址接受IP包。(在机器没有多个网络硬件界面的情况下,如果您的操作系统支持,您可以使用ifconfig alias命令来达到这个目的。)。
当使用基于IP的虚拟主机时,特殊的名称_default_可以在没有匹配上其它列出的虚拟主机的情况下作为匹配任何IP地址的虚拟主机。在没有进行_default_虚拟主机的设定时,在没有IP与请求匹配的情况下,将使用“主服务器”(包括所有在虚拟主机配置段之外的配置)的配置。(但请注意:任何匹配NameVirtualHost指令的IP地址既不会使用"main"服务器配置,也不会使用_default_虚拟主机的配置。 参阅基于域名的虚拟主机文档获得更多详情。)
您可以指定一个:端口来改变匹配的端口。如果没有指定,它将沿用主服务器中离它最近的那个Listen语句指定的值。您也可以指定:*来匹配那个地址上的所有端口。(当您使用_default_时,这是推荐采用的方法。)
安全提示:参阅安全提示文档获得为什么当您存储日志文件的目录对于启动服务器以外的用户来说是可写的会危及服务器安全的详细资料。
注意:<VirtualHost>的使用不会影响到Apache侦听的地址。您也许需要使用Listen来确保Apache侦听着正确的地址。
参见
Apache虚拟主机文档
关于DNS和Apache的警告
设置Apache将使用那个地址和端口
Directory、Location和Files配置段是如何工作的中包含了当接受一个请求时,这些不同的配置段是如何组合工作的相关解释。
维护者: Apache HTTP Server Documentation Project
模块索引 | 指令索引 | 常见问题解答 | 词汇表 | 站点导航
--------------------------------------------------------------------------------
项目维护者: kajaa [本文译者: biAji * ]
项目说明 | 项目进度 | 项目讨论区 | Apache手册中文版 |