基本语法
常量的定义与使用,使用关键词 Define 可以定义常量,使用 ${} 插入常量,如下
语法规则 | 说明 | 示列 |
---|---|---|
Define | 定义常量 | Define SRVROOT “D:/srv/Apache24” |
${} | 使用常量 | ServerRoot “${SRVROOT}” |
/ | 表示路径时使用 / 而不使用 \ | D:/srv/Apache24 |
基本配置
配置参数 | 配置说明 | 示列 |
---|---|---|
ServerRoot | Apache运行目录 | ServerRoot “D:/Apache24” |
Listen | 监听端口 | Listen 80 |
LoadModule | 加载模块 | LoadModule 模块名 模块文件 |
ServerAdmin | 管理员的邮箱,服务器出现问题时,会在页面中显示 | ServerAdmin admin@example.com |
ServerName | 服务器解析域名 | ServerName www.example.com |
ServerAlias | 域名别名,配置多域名解析时使用 | ServerName api.example.com |
DocumentRoot | 网站根目录 | DocumentRoot “${SRVROOT}/htdocs” |
DirectoryIndex | 网站自动执行文件,默认文件 | DirectoryIndex index.php index.html |
ErrorLog | 错误日志 | ErrorLog “logs/error.log” |
CustomLog | 设定日志的文件名和格式 | CustomLog “logs/access.log” common |
LogLevel | 错误提示等级 | LogLevel warn |
Include | 包含其他的配置文件,支持通配符 * | Include conf/vhosts/*.conf |
Alias | 使客户端可以访问到DocumentRoot以外的本地文件 | Alias /myphoto “E:/照片” |
ScriptAlias | 映射一个URL到文件系统并视之为CGI脚本目录 | ScriptAlias /cgi-bin/ “D:/wamp/bin/Apache2.4.23/cgi-bin” |
DefaultType | 当服务器无法确定一个文档的内容类型时发送的默认MIME内容类型 | DefaultType text/plain |
AddType | 为特定后缀的文件指定MIME类型,这里的设置将覆盖mime.types中的设置 | AddType application/x-httpd-php .php .html .htm (前导点可带可不带) |
ErrorDocument | 当遇到错误的时候服务器将给客户端什么样的应答。 语法:ErrorDocument error-code document 其中error-code时服务器返回的错误代码,document是回应的数据,可以是简单的文本,本地网页,本地CGI程序,或远程主机上的网页 | ErrorDocument 500 “The server made a boo boo.” |
EnableMMAP | httpd在递送中如果需要读取一个文件的内容,是否可以使用内存映射 | |
EnableSendfile | 控制httpd是否可以使用操作系统内核的sendfile支持来将文件发送到户端 | EnableSendfile Off |
容器设置
所有的容器都是成对出现的,和html的标签一样
< IfModule >容器
封装一组指令,并根据指定的模块是否启用决定是否进行处理
使用 <IfModule 模块名> 或 <IfModule !模块名> 判断模块是否载入<IfModule module_name>当模块module_name加载时执行里面的内容
</IfModule><IfModule !module_name>当模块module_name没有加载时执行里面的内容
</IfModule>
< IfDefine >容器
封装一组指令,只有在启动时启动参数测试结果为真时才生效
<IfDefine parameter-name> 或 <IfDefine !parameter-name>
parameter-name是在服务启动时,通过httpd命令行的 -D parameter 这样的形式指定的,
例如 httpd -D Proxy使用方式与<IfModule>一致
< Directory > 与 < DirectoryMatch > 容器
封装一组指令,在指定的目录以及其子目录中生效,这个目录必需时一个完整的目录
使用通配符 “"、"?" 匹配目录,也可以使用 “[]” 来确定字符范围,不过无论是"”、"?" , 还是 “[]” 都不能匹配 “/”
<Directory /srv/apache*/>AllowOverride noneRequire all denied
</Directory>
也可以在表达式前使用"~"表示使用正则表达式
<Directory ~"^/srv/apache[0-9]{2}/">AllowOverride noneRequire all denied
</Directory>
< DirectoryMatch >的使用方式与与< Directory >一致,区别时可以直接接受正则表达式,而无须加上"~"
< Files > 与 < FilesMatch > 容器
与< Directory >容器作用于目录相对应,< Files >容器只作用于文件,使用方法一致
<Files ~"^\.html">Order Deny,AllowAllow from All
</Files>
< Location >与< LocationMatch >容器
对URL进行访问控制;使用方法与上述几个容器一致。
指令设置
Options:控制在特定目录中将使用哪些服务器特性
参数 | 说明 |
---|---|
Indexes | 若访问目录下无index文件,则准许显示该目录下的文件列表以供选择。 |
FollowSymLinks | 准许在目录中使用符号链接到其他目录。 |
MultiViews | 准许内容协商的“多重视图”。如果客户端请求的路径可能对应多种类型的文件,服务器将根据客户端请求的具体情况自动选择一个最匹配客户端要求的文件。例如只在地址栏输入index也可以访问到index.php页面。 |
Includes | 准许SSI。 |
IncludesNOEXEC | 准许SSI,但不可使用exec和include功能。 |
ExecCGI | 准许在该目录下使用CGI。 |
All | 表示除了MultiViews之外的所有特性。 |
None | 表示不启用任何的服务器特性。 |
注意:如果一个目录被多次设置了options,则最特殊的一个会被完全接受。
AllowOverrid:是否准许文件“.htaccess”中设定的权限覆盖文件中设定的权限
参数 | 说明 |
---|---|
All | 准许覆盖 |
None | 不准许覆盖 |
AuthConfig | 允许使用与认证授权相关的指令。 |
FileInfo | 允许使用控制文档类型的指令、控制文档元数据的指令、mod_rewrite中的指令、mod_actions中的Action指令。 |
Indexs | 允许使用控制目录索引的指令。 |
Limit | 允许使用控制主机访问的指令。 |
控制访问状态
apache2.2 和 apache2.4 的配置方式不一样,2.2使用order+allow/deny,2.4使用Require语句来配置
apache2.2
Order:控制默认的访问状态和allow、deny指令生效的顺序
参数 | 说明 |
---|---|
allow | 允许访问。 |
deny | 拒绝访问。 |
这两个参数由最后一个出现的参数决定,如“Order allow,deny”默认拒绝了所有的意思(中间有且只有一个逗号),但最终的判断结果还要总下面的allow、deny语句中各自所包含的范围(如果有的话),这两个语句后面都一定接着“from”,否则Apache会无法启动。“Order allow,deny”表示先判断allow语句再判断deny语句。
# 拒绝所有请求
Order deny,allow
deny from all# 允许所有请求
Order allow,deny
allow from all# 只允许某个特定IP的访问
Order deny,allow
deny from all
allow xxx.xxx.xxx.xxx
apache2.4
# 拒绝所有请求
Require all denied# 允许所有请求
Require all granted# 只允许某个特定IP的访问
Require host xxx.xxx.xxx.xxx