Apache-官方文档-Notes
User’s Guide
Getting Start
Include
指令
可以用 Include
指令来包含多个配置文件:
1 |
|
由于这里设置了 ServerRoot
, 因此 conf/extra/httpd-mpm
的实际路径为: /etc/httpd/conf/extra/httpd-mpm.conf
配置文件必须以 .conf
结尾.
写在在 <Directory>
, <Location>
, <VirtualHost>
section 外的 directive 都具有全局作用域.
.htaccess
文件中的配置也是对当前目录有效.
DocumentRoot
指令
其用来指定静态资源的位置, 如 HTML, image files, CSS files 等.
其可以全局设置, 也可以给单个 virtual host 设置.
1 |
|
当发出 request 但没有指定具体的文件名时, DocumentRoot
之下的 index.html
则会被返回.
ErrorLog
指令
其用来指定 error log 存放的位置. 同样可以全局或者给具体的 VirtualHost 设置.
<Directory>
指令
用于为一个 directory 单独设置一组配置, 语法如:
1 |
|
<Directory>
和 </Directory>
用于 enclose.
在指定路径时, unix 的 wild-card 都可以使用.
也可用正则表达式匹配:
1 |
|
但其相对于直接匹配优先级更低 (指靠后匹配)
<Location>
指令
和 <Directory>
类似, 但其作用于匹配请求的 URL 路径.
当匹配 file system 以外的内容时, 使用这个指令.
Binding to Addresses and Ports
用 Listen
指令设置 Apache 需要监听的端口:
1 |
|
可以指定 ip:
1 |
|
指定协议:
1 |
|
(对 443
端口默认为 https, 而其他端口默认为 http)
可以用 <VirtualHost>
指令来为每一个绑定的地址和端口设置单独的行为.
Configuration File
配置的语法: 一行一个指令, 可以用 \
续行写.
传递给指令的参数用空格分隔.
如果一个参数包含空格, 则需要用引号包裹.
指令都是 case-insensitive, 但 arguments 要注意大小写.
用 #
编写注释.
可以用 Difine
指令定义变量:
1 |
|
这里配合 <IfDefine>
使用.
使用 Define
定义的变量或环境变量都可用:
1 |
|
的语法.
Modules
查看已编译进 Apache 的模块:
1 |
|
查看动态加载的模块:
1 |
|
动态加载一个模块, 用 LoadModule
指令:
1 |
|
可以配合 <IfModule test>...</IfModule>
section 使用.
Configuration Sections
用于对服务的配置进行局部的处理, 用 configuration section containers 或者 .htaccess
文件.
可用的 section containers 有:
<Directory>
<DirectoryMatch>
<Files>
<FilesMatch>
<If>
<IfDefine>
<IfModule>
<IfVersion>
<Location>
<LocationMatch>
<MDomainSet>
<Proxy>
<ProxyMatch>
<VirtualHost>
其中: <DirectoryMatch>
, <FilesMatch>
, and <LocationMatch>
that allow perl-compatible regular expressions
如:
1 |
|
Alias
指令
给文件路径起别名, 如:
1 |
|
ProxyPass
指令
需要先启用 mod_proxy
和 mod_proxy_http
模块.
用于将 remote server 映射到 local server 的 space.
此时 local server 作为 reverse proxy 或者 gateway.
一般用于 <Location>
section 中, 不能用于 <Directory>
, <If>
, <File>
containers 中.
1 |
|
等价于:
1 |
|
若不想反向代理子目录, 则:
1 |
|
Options
指令
用于启用或禁用指令, 启用用 +
, 而禁用用 -
, 如:
1 |
|
merge 的顺序
<Directory>
(except regular expressions) and .htaccess done simultaneously (with .htaccess, if allowed, overriding<Directory>
)<DirectoryMatch>
(and<Directory "~">
)<Files>
and<FilesMatch>
done simultaneously<Location>
and<LocationMatch>
done simultaneously<If>
sections, even when they are enclosed in any of the preceding contexts.
Dynamic Content with CGI
开启 CGI 脚本支持:
1 |
|
(mod_cgid
是 Apache 的外部 CGI 处理程序)
或:
1 |
|
(mod_cgi
是 Apache 的内部 CGI 处理程序, 但性能不如 cgid)
ScriptAlias
指令
和 Alias
具有相同的作用.
AddHandler
和SetHandler
指令
当用户不具备 ScriptAlias
所指定目录下的 CGI 脚本的执行权限时, 可以通过 AddHandler
和 SetHandler
来指定其他目录下的脚本.
如:
1 |
|
这里 cgi-script
是自己取的名称, .cgi
是用作 CGI 脚本的文件类型.
1 |
|
这里设定 Handler 为之前 add 的 cgi-script
.
让一个目录可以运行 CGI 脚本, 需要设置 Options
指令:
1 |
|
编写 CGI 脚本
CGI 脚本的所有输出都会被处理为一个 MIME-type
的 header. 且需要为 HTML 或者其他浏览器能够展示的格式.