Apache2.4配置文件详解(1)-常用配置指令

Apache 1251℃

1. ServerRoot

服务器的根目录,用于保存服务器的配置,错误和日志文件。一般无需更改。

ServerRoot "/usr/local/apache2"
#注意此指令中的路径最后不要加/

2.Mutex

Mutex 意思是互斥。为所有或指定的互斥锁配置互斥锁机制和锁定文件目录

Mutex default:logs

3. Listen

设置监听web服务IP地址和端口。只写端口代表即侦听本机所有的IP地址的指定端口,也就是说不写地址默认的地址为0.0.0.0。也可以指定多行listen。

Listen 80
Listen 192.168.2.2:8080
#如果使用IPV6地址,必须用方括号把IPV6地址括起来:
Listen [2001:db8::a00:20ff:fea7:ccea]:80

4. LoadModule

用于指定添加DSO(Dynamic Shared Object动态共享对象)动态模块的名称和路径,比如php支持模块、重定向模块、认证模块。注意静态编译的模块(由`httpd -l’列出的模块)不需要使用loadmodule加载。

LoadModule rewrite_module modules/mod_rewrite.so
#一般使用相对路径,是相对于ServerRoot所指示的路径

5. User/Group

定义在<IfModule unixd_module>段中。与大多数系统服务一样,通常最好创建一个用于运行httpd的用户和组(一般无登陆权限)。最初必须以root身份运行httpd,它会自动切换至该指定用户和组。强烈建议专门为Apache建立独立的用户和组。不建议使用nobody用户,因为可能有其他程序也在使用这个用户。最后要说的是该用户必须对apache站点路径和虚拟站点路径拥有读写权限,否则会报权限的错误。

User daemon
Group daemon

6. <IfModule>

用于封装指定模块下生效的指令。也就是说在<IfModule>中配置的指令仅当该模块加载的时才生效,否则将被忽略。

<IfModule [!]模块名称|模块标识符> 
#针对此模块的指令
</IfModule>

7. ServerAdmin

设置在所有返回给客户端的错误信息中包含的管理员邮件地址或网址。推荐使用Email地址,因为许多CGI脚本是这样认为的。

ServerAdmin you@example.com

8. ServerName

用于指定Apache默认的服务器名以及端口。当没有指定时,服务器会尝试对IP地址进行反向查询来推断主机名。如果没有指定端口号,服务器会使用接受请求的那个端口。建议显式的指定一个主机名和端口号。如果使用的是基于域名的虚拟主机,在<VirtualHost>段中的ServerName是为了匹配在”Host:”请求头中出现的虚拟主机名。

ServerName www.example.com:80

9. AllowOverride

设置 .htaccess文件里的配置是否覆盖现有配置。从安全性考虑,根目录一般都配置成不覆盖。AllowOverride仅在不包含正则表达式的<Directory>配置段中有效。

AllowOverride All # .htaccess文件里的配置覆盖现有配置
AllowOverride None #.htaccess文件将被完全忽略
AllowOverride AuthConfig #允许使用与认证授权相关的指令
AllowOverride FileInfo #允许使用控制文档类型的指令、控制文档元数据的指令、mod_rewrite中的指令、mod_actions中的Action指令
AllowOverride Indexes #允许使用控制目录索引的指令
AllowOverride Limit #允许使用控制主机访问的指令
AllowOverride Options[=Option,...] #允许使用控制指定目录功能的指令(Options和XBitHack)。可以在等号后面附加一个逗号分隔的Options选项列表,用来控制允许Options指令使用哪些选项。

10. Require

定义在<Directory>配置段中。用来进行访问控制,即允许或限制IP访问。常用案例:

Require all granted #允许所有访问
Require all denied #拒绝所有访问
Require host google.com #只允许来自特定域名主机的访问请求,其他请求将被拒绝
Require method http-method [http-method] ... #允许特定的HTTP方法(GET/POST/HEAD/OPTIONS)
Require ip 192.100 192.168.100 192.168.100.5 #允许特定IP或IP段,其他请求将被拒绝
Require not ip 192.120 192.168.100 #拒绝特定IP或IP段

11. <Directory>

<Directory>…</Directory>用于封装一组指令,这些指令仅对该目录及其子目录生效。如果有多个<Directory>配置段符合包含某文档的目录(或其父目录),那么指令将以短目录优先的规则进行应用,并包含.htaccess文件中的指令。含有正则表达式的目录将在所有普通配置段之后予以考虑。所有的正则表达式将根据它们出现在配置文件中的顺序进行应用。<Directory>指令不可被嵌套使用,也不能出现在<Limit>或<LimitExcept>配置段中。

<Directory Directory-path> ... </Directory>
#Directory-path可以是一个目录的完整路径,或是包含了Unix shell匹配语法的通配符字符串。在通配符字符串中,"?"匹配任何单个的字符,"*"匹配任何字符序列。也可以使用"[]"来确定字符范围。在"~" 字符之后也可以使用正则表达式。

12. DocumentRoot

设置Web文档根目录。 默认情况下,所有请求都来自此目录,但可以使用符号链接和别名指向其他位置。

DocumentRoot "/usr/local/apache2/htdocs"
#如果web文档路径不是绝对路径,则被假定为是相对于ServerRoot的路径。
#指定DocumentRoot时不应包括最后的"/"。

13. Options

定义在<Directory>配置段中。设置该目录可以使用服务器哪些特性。如果一个目录了设置多个Options,则最特殊的一个会被完全接受(其它的被忽略)。但是所有前面加有”+”号的可选项将强制覆盖当前的可选项设置,而所有前面有”-”号的可选项将强制从当前可选项设置中去除。

Options [+|-]option [[+|-]option] ...
option可以为下面选项中的一个或多个:
None  不启用任何额外特性。
All  启用除MultiViews之外的所有特性,这是默认设置。
ExecCGI  允许使用mod_cgi执行CGI脚本。
FollowSymLinks  服务器允许在此目录中使用符号连接,如果此配置位于<Location>配置段中,则会被忽略。
Includes  允许使用mod_include提供的服务器端包含。
IncludesNOEXEC  允许服务器端包含,但禁用"#exec cmd"和"#exec cgi",但仍可以从ScriptAlias目录使用"#include virtual"虚拟CGI脚本。
Indexes  如果一个映射到目录的URL被请求,而此目录中又没有DirectoryIndex(例如:index.html),那么服务器会返回由mod_autoindex生成的一个格式化后的目录列表。
MultiViews  允许使用mod_negotiation提供内容协商的"多重视图"(MultiViews)。
SymLinksIfOwnerMatch  服务器仅在符号连接与其目的目录或文件的拥有者具有相同的uid时才使用它。 如果此配置出现在<Location>配置段中,则将被忽略。

14. DirectoryIndex

设置当客户端请求一个目录时默认返回的文件。

DirectoryIndex Local-url [Local-url] ...
#Local-url(%已解码的)是一个相对于被请求目录的文档的URL(通常是那个目录中的一个文件)。可以指定多个URL,服务器将返回最先找到的那一个,比如:
DirectoryIndex index.html index.php

15. <Files>

<Files>…</Files>之间设置基于文件名的访问控制,类似于<Directory>和<Location>指令。<Files>段将根据它们在配置文件中出现的顺序被处理:在<Directory>段和.htaccess文件被处理之后,但在<Location>段之前。<Files>能嵌入到<Directory>段中以限制它们作用的文件系统范围,也可用于.htaccess文件当中,以允许用户在文件层面上控制对它们自己文件的访问。

<Files filename> ... </Files>
#filename参数应当是一个文件名或是一个包含通配符的字符串,其中"?"匹配任何单个字符,"*"匹配任何字符串序列。在"~"字符之后可以使用正则表达式。

16. ErrorLog

指定当服务器遇到错误时记录错误日志的文件路径。如果在<VirtualHost>中没有指定ErrorLog指令,则与虚拟主机相关的错误消息将记录在主配置的错误日志文件里。

ErrorLog file-path|syslog[:facility]
#file-path可以是绝对路径也可以相对于ServerRoot的路径;如果file-path以一个管道符号(|)开头,那么会为它指定一个命令来处理错误日志,如 ErrorLog "|/usr/local/sbin/cronolog /var/log/httpd/%w/errors_log"。
#如果系统支持,使用"syslog"替代文件名将通过 syslogd(8)来记载日志。默认将使用系统日志机制local7 ,但您可以用"syslog:facility"语法来覆盖这个设置,其中,facility的取值为syslog(1)中记载的任何一个名字。

17. LogLevel

用于调整记录在错误日志中的信息的详细程度。当指定了某个级别时,所有高于它级别的信息也会被同时记录。建议至少使用crit级别。当错误日志是一个单独分开的正式文件的时候,notice级别的消息总是会被记录下来,而不能被屏蔽。但是,当使用syslog来记录时就没有这个问题。

LogLevel level
level可以选择下列级别,依照重要性降序排列:
emerg  紧急(系统无法使用)
alert  必须立即采取措施
crit  致命情况
error  错误情况
warn  警告情况
notice  一般重要情况
info   普通信息
debug  调试信息

18. LogFormat

定义在<IfModule log_config_module>段中。设置访问日志的记录格式和别名。

LogFormat format|nickname [nickname]
LogFormat指令可以使用两种定义格式中的一种:
#第一种格式:指令只带一个参数,以定义后续的TransferLog指令定义的日志格式。
#第二种格式:将一个直接的format和一个nickname联系起来。这样在后续的LogFormat或CustomLog指令中,就不用一再重复整个冗长的格式串。定义别名的LogFormat指令仅仅用来定义一个nickname ,而不做其它任何事情,也就是说,它只是定义了这个别名,它既没有实际应用这个别名,也不是把它设为默认的格式。因此,它不会影响后续的 TransferLog指令。另外,LogFormat不能用一个别名来定义另一个别名。nickname不能包含百分号(%)。

19. CustomLog

定义在<IfModule log_config_module>段中。设定日志文件的路径和格式。

CustomLog file|pipe format|nickname [env=[!]environment-variable]
#第一个参数指定了日志记录的位置,可以使用以下两种方式来设定:
file  相对于ServerRoot的日志文件名。
pipe  管道符"|"后面紧跟着一个把日志输出当作标准输入的处理程序路径。
#第二个参数指定了写入日志文件的内容。它既可以是由前面的LogFormat指令定义的nickname ,也可以是自定义日志格式的logformat字符串。
#第三个参数是可选的,它根据服务器上特定的环境变量是否被设置来决定是否对某一特定的请求进行日志记录。如果这个特定的环境变量被设置(或者在"env=!name"的情况下未被设置),那么这个请求将被记录。可以使用mod_setenvif和/或mod_rewrite模块来为每个请求设置环境变量。

20.Redirect

定义在<IfModule alias_module>段中。用于告诉客户端以前存在于服务器命名空间中的文档,但不再存在。 客户将在其新位置对该文档发出新请求。

Redirect permanent /foo http://www.example.com/bar

21. Alias

定义在<IfModule alias_module>段中。用于将Web路径映射到文件系统路径,并用于访问不在DocumentRoot下的内容。

Alias URL-path file-path|directory-path
#Alias指令使文档可以被存储在DocumentRoot以外的本地文件系统中。以(%已解码的)url-path路径开头的URL可以被映射到以directory-path开头的本地文件。
#如果对在DocumentRoot之外的某个目录建立了一个Alias ,则可能需要通过<Directory>段明确的对目标目录设定访问权限。

22.ScriptAlias

定义在<IfModule alias_module>段中。映射一个Web路径到文件系统并视之为CGI脚本目录。也就是说控制哪些目录包含服务器脚本。ScriptAliases行为与Alias基本相同,只是目标目录中的文档被视为应用程序,并在请求时由服务器运行,而不是作为发送到客户端的文档。 关于尾随“/”的相同规则适用于与Alias相关的ScriptAlias指令。

ScriptAlias URL-path file-path|directory-path
#以URL-path开头的(%已解码的)的URL会被映射到由第二个参数指定的具有完整路径名的本地文件系统中的脚本。

23.ScriptSock

定义在<IfModule cgid_module>段中。在线程服务器上,指定用于与mod_cgid的CGI守护程序通信的UNIX套接字的路径。这个套接字将会用启动Apache服务器的父进程用户权限(通常是root)打开。为了维护与CGI脚本通讯的安全性,不允许其他用户拥有写入套接字所在目录的权限是很重要的。

Scriptsock cgisock

24.RequestHeader

定义在<IfModule headers_module>段中。避免将HTTP_PROXY环境传递给CGI上的这个或任何具有延迟“httpoxy”缺陷的代理后端服务器。如果你在 Apache HTTP 服务器中使用 mod_cgi来运行 Go 或 Python 写的脚本,那么它们会受到影响(这里 HTTP_PROXY 环境变量是“真实的”)。而 mod_php 由于用于 PHP 脚本,也存在该缺陷。如果你使用 mod_headers 模块,你可以通过下述配置在进一步处理请求前就unset 掉 Proxy 请求头部:

RequestHeader unset Proxy early

25.TypesConfig

定义在<IfModule mime_module>段中。设置文件扩展名到MIME类型映射列表的文件路径。

TypesConfig conf/mime.types

26.AddType

定义在<IfModule mime_module>段中。添加或覆盖指定文件类型对应的MIME类型。

AddType application/x-gzip .tgz

27. DefaultType

指定在服务器无法确定内容类型时发送的默认MIME类型。

DefaultType text/plain

28.AddEncoding

定义在<IfModule mime_module>段中。让浏览器动态解压缩信息。 注意并非所有浏览器都支持此功能

AddEncoding x-compress .Z
AddEncoding x-gzip .gz .tgz

29.AddHandler

定义在<IfModule mime_module>段中。将文件扩展名映射到指定的处理程序。例如,要激活文件扩展名为.cgi的CGI脚本,可以使用:

AddHandler cgi-script .cgi

30.AddOutputFilter

定义在<IfModule mime_module>段中。将文件扩展名映射到将处理来自服务器的响应的过滤器。

AddOutputFilter INCLUDES .shtml

31.MIMEMagicFile

使用指定的魔术文件,根据文件内容确定MIME类型。

MIMEMagicFile conf/magic

32. ErrorDocument

设置当服务器遇到错误的时返回给客户的响应。有三种形式:

ErrorDocument 500“servers 500 error”#纯文本提示
ErrorDocument 404 /missing.html #本地重定向
ErrorDocument 402 http://www.example.com/subscription_info.html #外部重定向

33.MaxRanges

限制服务器返回到客户端的HTTP范围的数量。 如果请求的范围超出允许范围,则返回完整资源。

MaxRanges default|unlimited|none|200
#default默认数量(200)、unlimited不限制、none数量范围被忽略、200自定义

34. EnableMMAP

当处理一个需要访问文件中的数据的请求时使用内存映射(memory-mapping)来读取文件。如果操作系统支持,Apache将默认使用内存映射。这种内存映射有时会带来性能的提高,但在一些多处理器的系统上,内存映射会减低一些httpd的性能,就需要禁用该功能;在挂载了NFS的文件夹上,若已经将一个文件进行了内存映射,则删除或截断这个文件会造成httpd因为分段故障而崩溃,可以单独在<directory>段中指定禁用内存映射。

EnableMMAP On|Off

35. EnableSendfile

是否可以使用操作系统内核的sendfile支持来将文件发送到客户端。默认情况下如果操作系统支持,当处理一个请求并不需要访问文件内部的数据时(比如发送一个静态的文件内容),Apache将使用sendfile将文件内容直接发送到客户端而并不读取文件。这个sendfile机制避免了分开的读和写操作以及缓冲区分配,但是在一些平台或者一些文件系统上,最好禁止这个特性来避免一些问题。

EnableSendfile Off

36. include

在服务器配置文件中包含其它配置文件。Shell风格(fnmatch())的通配符可以用于按照字母顺序一次包含多个文件。另外,如果Include指向了一个目录而不是一个文件,Apache将读入该目录及其子目录下的所有文件,并依照字母顺序将这些文件作为配置文件进行解析。但是并不推荐这么做,因为偶尔会有临时文件在这个目录中生成,从而导致httpd启动失败。

Include file-path|directory-path
#文件的路径可以是一个完整的绝对路径(以一个斜杠开头),或是相对于ServerRoot目录的相对路径。

转载请注明:零五宝典 » Apache2.4配置文件详解(1)-常用配置指令