apache配置文件为httpd.conf,所在位置为conf目录下。任何指令都可以放置在这个配置文件中,但这些修改的指令都只能是在httpd启动或重新启动时才能被识别。
httpd配置文件每行包含一个指令。反斜杠“ \”可以用作一行的最后一个字符,以指示该指令继续到下一行。反斜杠和行尾之间不得有其他字符或空格。指令的参数由空格分隔。如果参数包含空格,则必须将该参数用引号引起来。配置文件中的指令不区分大小写,但是指令的参数通常区分大小写。以井号“#”开头的行被视为注释,并被忽略。注释不能与配置指令放在同一行。在指令之前会出现空白,因此为了清楚起见,您可以缩进指令。空行也将被忽略。
可以使用语法在配置文件行中使用Shell环境变量的值${ENVVAR}。如果“ ENVVAR”是有效环境变量的名称,则将该变量的值替换为配置文件行中的该位置,然后继续进行处理,就像直接在配置文件中找到该文本一样。(如果找不到ENVVAR变量,则字符“ $ {ENVVAR}”将保持不变,以供配置文件处理中的后续阶段使用。)
在环境变量替换之后,配置文件中一行的最大长度为8192个字符,该变量是在替换环境变量,连接任何连续的行并删除开头和结尾的空白之后。
您可以使用apachectl configtest或-t命令行选项在不启动服务器的情况下检查配置文件中的语法错误。
配置文件中常见配置项说明:
1. ServerRoot
http-www的Home目录,用来存放配置文件、错误文件、记录文件。
2. Listen
用于设置服务器IP地址和端口号,apache默认端口号是80。
3.User
启动apache的相关用户
4.Group:
启动apache相关组
5.PidFile:
表示启动程序进程所在的位置
6.Timeout:
表示连接超时,如果客户端与服务器已连接上,在超时范围内还未发送请求给服务器,那么服务器会自动与客户端断开。
7.KeepAlive:
表示是否保持长连接,即在一个TCP连接下可以发送多个HTTP请求。
语法:
KeepAlive On|Off
默认值:
KeepAlive On
HTTP1.0的Keep-Alive扩展功能和HTTP1.1的持久连接功能提供了长期存在的HTTP会话,该会话允许通过同一TCP连接发送多个请求。
8.KeepAliveTimeout:
表示当开启长连接时,请求与请求之间的时间隔。
KeepAliveTimeout seconds
KeepAliveTimeout 5
设置KeepAliveTimeout为较高的值可能会导致服务器负载过重的性能问题。超时时间越长,等待与空闲客户端进行连接的服务器进程将被占用的时间越长。
9.MPM相关参数
MPM是多通路处理模块,主要的参数包括:StartServers、MaxClients、Serverlimit、MinSpareThreads、MaxSpareThreads、ThreadsPerChild和MaxRequestsPerChild。这些参数具体的使用在后面讲MPM调优时会详细来介绍。
10.ServerName
表示服务器的主机名
11.DocumentRoot
表示发布的应用程序所在的位置
DocumentRoot语法:
DocumentRoot directory-path
默认值:
DocumentRoot /usr/local/apache/htdocs
该指令设置httpd将从该路径下获取取。例:
DocumentRoot /usr/web
如果访问 http://www.my.host.com/index.html将指向 /usr/web/index.html。如果目录路径不是绝对路径,则假定它是相对于的ServerRoot。
12. Directory指令
其语法如下:
directory-path>
...
Directory-path可以是目录的完整路径,也可以是使用Unix Shell样式匹配的通配符字符串。在通配符字符串中,?匹配任何单个字符,并且*匹配任何字符序列,也可以使用[]约束字符的范围。所有通配符都不匹配'/'字符,因此将不匹配 /home/user/public_html,但将匹配。例:
Options Indexes FollowSymLinks
除了可以使用通配符匹配路径外,路径也可以支持正则表达式的形式。例如:
表示将匹配/www/由三个数字组成的目录。
如果多个(非正则表达式)节与包含文档的目录(或其父目录之一)匹配,则将以最短匹配的顺序应用这些指令,并在这些文件中插入.htaccess文件中的指令。例如,
AllowOverride None
AllowOverride FileInfo
AllowOverride None:表示(禁用.htaccess文件)。
AllowOverride FileInfo:表示(用于directory /home)。
以访问文档/home/web/dir/doc.html为例,其访问顺序如下:
应用所有FileInfo的指令 /home/.htaccess、/home/web/.htaccess、/home/web/dir/.htaccess,并按此顺序访问。
13. DirectoryMatch指令
包含适用于与正则表达式及其子目录匹配的文件系统目录的指令。
语法:
< DirectoryMatch regex >
...
这些指令将仅适用于命名目录和 该目录的子目录(以及其中的文件)
将匹配/www/由三个数字组成的目录。
14.IfModule指令
语法:
module-file|module-identifier> ...
表示检测特定的模块是否存在,如果存在则执行里面的指令,如果不存在则忽略开始标记到结束标记之间所有的内容。
15.Location指令
语法:
URL-path|URL> ...
该指令是将其附随的参数传递到URL中,location指令后面的参数就是直接应用于URL请求中的,如果需求生效,那么URL路径部分应该满足以下任一条件:
Ø 指定的位置与URL的路径部分完全匹配。
Ø 以反斜杠结尾的指定位置是URL路径部分的前缀。
Ø 指定的位置(带有尾部的斜杠)是URL路径部分的前缀。
如/ private1,/ private1 /和/private1/file.txt,将这些目录附随到URL地址中。
该URL可以使用通配符。在通配符字符串中,?匹配任何单个字符,并且*匹配任何字符序列。这两个通配符都不匹配URL路径中的/。
除~字符外,还可以使用 正则表达式。例如:
16. Options指令
options用于配置特定目录中可用的功能
语法:
Options [+|-]option [[+|-]option] ...
该Options指令用于控制访问服务器目录的权限。选项可以设置为None,在这种情况下,不会启用任何附加功能,或者以下一项或多项:
Ø All
表示除MultiViews之外的所有特性,该选项为默认值。
Ø ExecCGI
允许使用mod_cgi模块执行CGI脚本。
Ø FollowSymLinks
服务器允许在此目录中使用符号连接,如果需求将目录链接到其它的路径下就需要使用到符号链接。如果该配置选项位于 配置段中,将会被忽略。即使服务器遵循符号链接,它也不会 更改
Ø Indexes
表示匹配的index文件类型,如果输入的网址中有这个index文件,那么就会显示出这个文件内容,如果没有index文件,则会返回由mod_autoindex模块生成的一个格式化的目录列表,并列出该目录下的所有文件。
Ø MultiViews
允许使用mod_negotiation模块提供内容协商的"多重视图"。简而言之,如果客户端请求的路径可能对应多种类型的文件,那么服务器将根据客户端请求的具体情况自动选择一个最匹配客户端要求的文件。在 HTTP 协议中,内容协商是这样一种机制,通过为同一 URI 指向的资源提供不同的展现形式,可以使用户代理选择与用户需求相适应的最佳匹配(例如,文档使用的自然语言,图片的格式,或者内容编码形式)。
一份特定的文件称为一项资源。当客户端获取资源的时候,会使用其对应的 URL 发送请求。服务器通过这个 URL 来选择它指向的资源的某一变体——每一个变体称为一种展现形式——然后将这个选定的展现形式返回给客户端。整个资源,连同它的各种展现形式,共享一个特定的 URL 。当一项资源被访问的时候,特定展现形式的选取是通过内容协商机制来决定的,并且客户端和服务器端之间存在多种协商方式。
Ø SymLinksIfOwnerMatch
服务器仅在符号连接与目标文件或目录的所有者具有相同的用户ID时才使用它。简而言之,只有当符号连接和符号连接指向的目标文件或目录的所有者是同一用户时,才会使用符号连接。如果该配置选项位于
Apache允许在一个目录配置中设置多个Options指令,如果一个目录中设置了多个Options指令,那么特性最多的Options指令会被使用,其它的都会被忽略,默认情况下各个Options指令之间并不会合并,但可能通过"+"或"-"。"+"表示将该选项添加到选中来,"-"选择在选项中删除该选项。
注意:混合使用前面带"+"/"-"和前面不带"+"/"-"的同一可选项,可能会导致出现意料之外的结果。