Useful Information Note

Apache配置文件详解


前言

既然学习了 Nginx 的配置,又怎么能错过 Apache 的配置文件呢?

正文

Apache 的配置文件为 httpd.conf,在 /Apache24/conf/ 下。乍一看它的配置文件很大,有 500 多行,但其实大部分都是注释,是对配置项的解释和说明。

下面是从上到下对各个配置项的说明:

ServerRoot

ServerRoot 主要用于指定 Apache 的安装路径,此选项参数值在安装 Apache 时系统会自动写入。

Windows 下安装时,值为 Apache 安装的路径,Linux 下安装时,值为编译时 --prefix 的路径。

ServerRoot "D:/web/Apache/Apache24"

Mutex default:logs

为多个不同的互斥对象设置互斥机制(mutex mechanism)和互斥文件目录,或者修改全局默认值。如果互斥对象是基于文件的并互斥文件目录不在本地磁盘,那么取消注释并改变目录。

# Mutex default:logs

Listen

设置 Apache 监听的 Web 服务端口号,默认为:80,即监听所有的地址的 80 端口。也可以写成 IP 地址 + 端口号的形式,用来监听特定 IP。

#Listen 12.34.56.78:80 Listen 80

Dynamic Shared Object (DSO) Support(动态共享对象支持)

主要用于添加 Apache 一些动态模块,例如重定向模块,认证模块等。如果需要添加某些模块,只需把相关模块前面注释符号取消掉即可。

... #LoadModule ssl_module modules/mod_ssl.so #LoadModule status_module modules/mod_status.so #LoadModule substitute_module modules/mod_substitute.so #LoadModule unique_id_module modules/mod_unique_id.so #LoadModule userdir_module modules/mod_userdir.so #LoadModule usertrack_module modules/mod_usertrack.so #LoadModule version_module modules/mod_version.so #LoadModule vhost_alias_module modules/mod_vhost_alias.so #LoadModule watchdog_module modules/mod_watchdog.so #LoadModule xml2enc_module modules/mod_xml2enc.so

LoadMoudle 后面第一个参数为模块的名称,第二个参数为模块的路径。

Apache运行用户和用户组

此选项主要用指定 Apache 服务的运行用户和用户组,默认为:daemon。

<IfModule unixd_module> User daemon Group daemon </IfModule>

这里顺便介绍下 <IfModule> 的含义:

<IfModule test> ... </IfModule> 配置段用于封装根据指定的模块是否启用而决定是否生效的指令。也就是说,如果启用了 test 模块,那么这些配置生效,如果没有启用,则不生效。

ServerAdmin

此选项主要用指定 Apache 服务管理员通知邮箱地址,选择默认值即可。

ServerAdmin admin@example.com

ServerName

此选项主要用指定本服务器名称和端口号,可以设定为 IP 地址或者域名,当这项不正确的时候服务器不能正常启动。

ServerName localhost:80

Directory 根目录访问控制设置

此选项设置拒绝用户访问根目录文件,后面有另外一个 Directory 选项可以设置自己网站的访问权限。

<Directory /> AllowOverride none Require all denied </Directory>

DocumentRoot

站点的根目录。

DocumentRoot "D:/web/www"

Directory 站点目录的访问控制设置

对站点根目录的权限访问设置,默认对网站的根目录具有访问权限。

对 D:/web/ww目录的访问权限的设置。

Options: Indexes 表示当网页不存在的时候允许索引显示目录中的文件;FollowSymLinks 表示允许访问符号链接文件;ExecCGI 表示允许使用CGI; SymLinksOwnerMatch 表示当符号链接的文件和目标文件为同一用户拥有时才允许访问;

AllowOverride: None 表示不允许这个目录下的访问控制文件(.htaccess)来改变这里的配置,也就是不用查看这个目录下的访问控制文件,修改为 AllowOverride All 表示允许 .htaccess 更改配置;

Require:对页面的访问控制,和上一项结合可以控制对网站的访问控制;

<Directory "D:/web/www"> Options Indexes FollowSymLinks // 可以访问站点目录 # Options None // 不允许访问站点目录,只能打开文件 AllowOverride None Require all granted </Directory>

DirectoryIndex

设置 Apache 默认支持的首页,默认只支持: index.html,如要支持其他类型的首页,需要在此区域添加:如 index.php 表示支持 index.php 类型首页。

<IfModule dir_module> DirectoryIndex index.html index.php </IfModule>

禁止访问.ht文件

此选项主要是针对 .ht 文件访问控制,默认为禁止访问。

<Files ".ht*"> Require all denied </Files>

ErrorLog

设置错误日志的存放位置。

ErrorLog "logs/error.log"

LogLevel

设置哪种等级的错误需要写入错误日志,可选参数: debug, info, notice, warn, error, crit, alert, emerg.

LogLevel warn

log_config_module模块设置

日志相关设置,包括记录日志的格式与 access 日志存放的位置等。

<IfModule log_config_module> #用不同的代号表示参数,并定义了日志的格式 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> # You need to enable mod_logio.c to use %I and %O LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> # access log 的位置和格式 CustomLog "logs/access.log" common #CustomLog "logs/access.log" combined </IfModule>

Redirect Alias ScriptAlias

这个模块包括 URL 重定向、别名、脚本别名相关配置。

Redirect 参数是用来重定向的,当浏览器访问服务器上的一个已经不存在的资源的时候,服务器返回给浏览器新的 URL,告诉浏览器从该 URL 中获取资源。这主要用于原来存在于服务器上的文档改变位置之后,又需要能够使用老 URL 能访问到原网页;

Alias 用于给某个路径赋值别名,可以定义一些不在 DocumentRoot 下的文件,并将其映射到网页根目录中,这也是访问其他目录的一种方法,但在声明时要在目录后面加 /

ScriptAlias 与 Alias 相似,对脚本解释器赋值别名;

<IfModule alias_module> # Redirect permanent /foo http://www.example.com/bar # Alias /webpath /full/filesystem/path ScriptAlias /cgi-bin/ "c:/Apache24/cgi-bin/" </IfModule>

cgi设置

<IfModule cgid_module> #Scriptsock cgisock </IfModule> # cgi 目录访问限制 <Directory "c:/Apache24/cgi-bin"> AllowOverride None Options None Require all granted </Directory> # 可以实现一些 HTTP header 的设置,如缓存时间等 <IfModule headers_module> RequestHeader unset Proxy early </IfModule>

MIME媒体文件支持

主要包含一些 MIME 文件支持,表示文件扩展名与文件内容类型之间的映射关系,例如添加对 PHP 文件扩展名映射关系。

<IfModule mime_module> # 指定使用该文件的映射关系 TypesConfig conf/mime.types # AddType:新增或者重写映射规则 #AddType application/x-gzip .tgz # AddEncoding:用于告诉浏览器一些使用压缩的 MIME 类型,这样可以让浏览器进行解压缩操作,但不是所有的浏览器都支持 #AddEncoding x-compress .Z #AddEncoding x-gzip .gz .tgz # 如果不支持,则需要用AddType AddType application/x-compress .Z AddType application/x-gzip .gz .tgz # AddHandler:表示允许某些后缀名的文件采用某种格式脚本运行 #AddHandler cgi-script .cgi #AddHandler type-map var # Filters:在发送给客户端前修改文件内容 #AddType text/html .shtml #AddOutputFilter INCLUDES .shtml # 增加对PHP的支持 # For php7 # PHPIniDir "D:/web/PHP/php-7.1.6" # LoadModule php7_module "D:/web/PHP/php-7.1.6/php7apache2_4.dll" # AddType application/x-httpd-php .php # For php5 PHPIniDir "D:/web/PHP/php-5.6.31" LoadModule php5_module "D:/web/PHP/php-5.6.31/php5apache2_4.dll" AddType application/x-httpd-php .php </IfModule>

MIMEMagicFile

根据 MIMEMagicFile 文件的规则,Apache 通过检查文件开始的几个字节,来判定文件的 MIME 类型依据。这个配置用于指定 MIMEMagicFile 的路径。

#MIMEMagicFile conf/magic

ErrorDocument

定制的访问错误响应提示,支持三种方式:明文,本地重定向,外部重定向;

#ErrorDocument 500 "The server made a boo boo." #ErrorDocument 404 /missing.html #ErrorDocument 404 "/cgi-bin/missing_handler.pl" #ErrorDocument 402 http://www.example.com/subscription_info.html

例如第三个表示当服务器出现 404 错误的时候,返回 missing.html 页面。

MaxRanges

定义了在一个请求返回的资源数目的最大值,可以设置为 default,none 或 unlimited。

#MaxRanges unlimited

MMAP 内存映射

是否允许内存映射:如果 httpd 在传送过程中需要读取一个文件的内容,它是否可以使用内存映射。如果为 on 表示如果操作系统支持的话,将使用内存映射。在一些多核处理器的系统上,这可能会降低性能,如果在挂载了 NFS 的 DocumentRoot 上如果开启此项功能,可能造成因为分段而造成 httpd 崩溃。

#EnableMMAP off

Sendfile 发送文件至客户端

配置 httpd 是否可以使用操作系统内核的 sendfile 函数将文件发送到客户端。默认情况下,当处理一个请求并不需要访问文件内部的数据时(比如发送一个静态的文件内容),如果操作系统支持,Apache 将使用 sendfile 将文件内容直接发送到客户端而并不读取文件。

#EnableSendfile on

Apache 补充配置

对 Apache 服务器其它的一些功能进行配置或者修改 Apache 的默认配置,配置文件在 /conf/extra/ 下。可以通过 Include 引入也可以根据需要直接把它们的内容粘贴到这个文件中。

包括:服务器池管理,多语言错误消息,动态目录列表形式配置,语言设置,用户家庭目录,请求和配置上的实时信息,虚拟主机,分布式认证和版本控制,Apache 默认设置,支持 HTML4/XHTML1 等。

# Server-pool management (MPM specific) #Include conf/extra/httpd-mpm.conf # Multi-language error messages #Include conf/extra/httpd-multilang-errordoc.conf # Fancy directory listings #Include conf/extra/httpd-autoindex.conf # Language settings #Include conf/extra/httpd-languages.conf # User home directories #Include conf/extra/httpd-userdir.conf # Real-time info on requests and configuration #Include conf/extra/httpd-info.conf # Virtual hosts #Include conf/extra/httpd-vhosts.conf # Local access to the Apache HTTP Server Manual #Include conf/extra/httpd-manual.conf # Distributed authoring and versioning (WebDAV) #Include conf/extra/httpd-dav.conf # Various default settings #Include conf/extra/httpd-default.conf # Configure mod_proxy_html to understand HTML4/XHTML1 <IfModule proxy_html_module> Include conf/extra/proxy-html.conf </IfModule>

HTTPS

主要是关于服务器安全连接(HTTPS)方面的设置。

# Secure (SSL/TLS) connections #Include conf/extra/httpd-ssl.conf # <IfModule ssl_module> SSLRandomSeed startup builtin SSLRandomSeed connect builtin </IfModule>

参考

Apache主配置文件httpd.conf 详解

Apache配置文件详解之httpd.conf(1)


上一篇:Apache 配置指令 ServerName/ServerAlias