前言
最近帮一朋友布置 Web服务器,于是正好抽个时间把 apache 服务器的配置文件 httpd.conf 里面涉及的几个比较常用的命令和配置选项的用法和功能整理了一下,与君共勉之。
1. ServerRoot [目录字符串]
指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录。
2. Listen
定义监听IP 和/或 端口,其后你可以接 端口号,表示监听指定端口号的所有IP地址的HTTP请求。
例如:接受所有IP地址上的80端口的HTTP请求:
Listen 80
也可以接IP和端口地址,二者之间用 ":" 隔开,表示只监听指定IP向指定端口的HTTP请求。
例如:只接受来自某个IP的80端口的HTTP请求:
Listen 111.231.237.170:80
Listen命令可以有多个,以监听多个IP和端口的HTTP请求。
例如:监听所有IP的80端口HTTP请求和某IP的8080端口的HTTP请求:
Listen 80
Listen 111.231.237.170:8080
3. User daemon 和 Group daemon
定义httpd服务运行时使用的用户及其用户组,默认为用户daemon和用户组daemon,daemon是httpd安装是自动创建的。你可以自己给httpd指定其他用户和用户组,前提是你必须先建立该用户和用户组。这一项常用来给httpd服务降权的,以提高系统的安全性。
4. ServerAdmin you@example.com
ServerAdmin设置了在所有返回给客户端的错误信息中包含的管理员邮件地址。如果httpd不能将提供的参数识别为URL,它就会假定它是一个email-address ,并在超连接中用在mailto:后面。推荐使用一个Email地址,因为许多CGI脚本是这样认为的。如果你确实想使用URL,一定要保证指向一个你能够控制的服务器,否则用户将无法确保一定可以和你取得联系。
5. ServerName www.example.com:80
定义服务器名称,是服务器用于识别自身的方式,但这个过程服务器可以自动完成,可以不用指明。但对于apache 2.4 版本的服务器,若不指明该项参数,启动服务器时会出现警告。
6. <Directory [目录] ></Directory>语句块
该语句块定义了访问者对指定目录下的文件和目录的权限。主要由如下几种指令完成。
Options指令:
(1)Options none :禁止对目录的所有操作。
(2)Options all :允许对目录的所有操作。
(3)Options ExecCGI :对该目录可以执行cgi脚本。
(4)Options Indexes :允许访问该目录。
(5)Options FollowSymLinks :只允许对目录的FollowSymLinks操作。
AllowOverride指令:
(1)AllowOverride none :不读取.htaccess.
(2)AllowOverride all :允许.htaccess所有指令。
(3)AllowOverride Limit :.htaccess函盖具体限定的主机(allow,deny)
(4)AllowOverride AuthConfig :.htaccess函盖跟认证有关指令(AuthType,AuthName)
Order Allow,Deny 指令:
(1)先使用 Order Allow,Deny 启动对访问者的访问授权,然后使用Allow和Deny命令指定访问者。
(2)Allow from 命令允许指定对象访问目录。
例如a:允许所有人访问该目录:
Allow from all
例如b:允许某IP访问该目录:
Allow from 111.231.237.170
例如c:允许某IP端访问该目录:
Allow from 111.231.237
(3)Deny from 命令和Allow from 命令的格式相似,只不过功能相反,它是禁止某IP的访问,因此不再举例。
(4)Order Allow,Deny 命令中的Allow和Deny关键词可以换位置,但交换位置之后,功能也随之改变,位于逗号之前的关键词定义的内容先解读,位于逗号之后的关键词定义的内容后解读,且后面的关键词可以覆盖前面的关键词定义的对象范围(当两者定义的对象有交集时)。
例如:只限制ip1和ip2的访问,而不限制其他IP访问:
Order Allow,Deny
Allow from all
Deny from ip1 ip2
这个例子中的Allow from 允许了全部IP可访问,但Deny from 命令又禁止了ip1和ip2,显然ip1和ip2也属于全部IP的范围之内,连个语句不久出现冲突了吗?其实并不是这样,因为还得看 Order 命令定义的Allow和Deny 的顺序,由于Deny在后,后解读,会覆盖之前解读的Allow from 定义的部分范围,也就是从Allow from 定义的所有IP中去掉Deny from 定义ip1和ip2。当然还是拿上面这个例子来说,如果交换了Order 定义的Allow和Deny关键词的顺序,则上例的功能变成了允许全部IP访问了。
(5)如果你只定义 Order 语句而不定义Allow from 语句和Deny from语句,则效果等同于同时定义了Allow from all 命令和Deny from all 命令,这时就由Order 语句中定义的Allow 和Deny 关键词的顺序决定是允许还是拒绝全部IP的访问。
例如a:允许全部IP访问:
Order Deny,Allow
例如b:拒绝全部IP访问:
Order Allow,Deny
Require指令:
(1)也是一种访问控制规则,功能与Deny和Allow相似。
(2)require all granted :允许所有的访问请求。
(3)require all denied :拒绝所有的访问请求。
(4)require ip [ip或ip段] :只允许特定IP或IP段访问,多个IP或IP段之间用空格隔开。
(5)require not ip [ip或ip段] :拒绝特定ip或IP段的访问,多个IP或IP段之间用空格隔开。
(6)require host [域名] : 只允许特定域名的主机访问。
(7)require method [GET/POST/HEAD/OPTIONS] :允许使用特定的HTTP方法访问。
7. Errorlog "logs/error_log"
指定错误记录文件,这里的“错误”并不一定是错误信息,要结合下面要讲的 logLevel 指令一起来决定记录到 error_log 中的是什么信息。
8. LogLevel 指令
指定日志文件记录的信息的等级(类别),其后可接的值有:debug、info、notice、warn、error、crit、alert 和 emerg 。
9. ErrorDocument [错误代码] [返回信息]
此处定义了当发生错误时,返回给客户端的字符串或网页,因此返回信息为字符串或者网页(地址)。
10. DocumentRoot [目录字符串]
该指令定义站点根目录,也就是你网站首页的目录。