最近稍微了解了一下apache2关于http.conf中的几个配置项,网上说的比较少有的还是错的,apache的官网文档很全也很详细,所以这里稍微说明一下以做备忘
这里有个例子,我们把访问的网页和CGI文件都丢到/my/web下面
<Directory /var/www/my/web>
AuthType None
Options Indexes +ExecCGI -MultiViews +SymLinksIfOwnerMatch
AddHandler cgi-script .cgi .pl
AllowOverride None
Order allow,deny
allow from all
</Directory>
其中:
AuthType None
安全认证类型,这个网上很多不解释
AddHandler cgi-script .cgi .pl
可执行脚本的类型,后台有哪些类型的执行脚本在这里加上,否则会报找不到文件的错误。例子中后台只有二进制的CGI文件和perl的脚本。
allow from *
通过IP地址或者主机名限制访问, 例子中 allow from all
我们不拒绝任何用户访问,如果希望限制部分访问可以
Allow from 192.168.1.2/24 deny from 192.168.1.110/24
这样192.168.1.109可以访问而192.168.1.111就无法访问了。
Order allow,deny
顾名思义,访问控制顺序,就是指定allow from * 中允许和拒绝的操作的顺序, 还是以上面为例Allow from 192.168.1.2/24 deny from 192.168.1.110/24
如果顺序是allow, deny 则先允许192.168.1.2以后的IP地址通过, 之后再拒绝192.168.1.110以后的地址通过
结果就是只有192.168.1.2 - 192.168.1.109之间的地址可以允许访问。
相反如果是顺序是deny,allow 那么先拒绝192.168.1.110之后的地址,在允许192.168.1.2之后的地址通过
那么结果192.168.1.2之后的所有地址都可以访问,其中也包括192.168.1.110之后的地址
AllowOverride None
在http.conf中的访问控制提供的功能很简单(只能像上面那样限制部分主机访问),如果复杂一些的功能,诸如user,group权限之类的权限就需要到.htaccess进行配置。
当apache server读到这个目录配置的时候,如果配置项AllowOverride None则无视.htaccess,如果AllowOverride All (默认),则apache会去读取.htaccess中关于此目录的权限配置。
Options Indexes +ExecCGI -MultiViews +SymLinksIfOwnerMatch
最后我们来看看option选项,“+” 指的是增加此属性项, 相反 “-” 就是去除。
Indexes
如果没有默认能够打开的文件,则显示当前目录结构。
通常当用户访问主页的时候,apache都会在目录下寻找默认的index.html的文件打开(或者xml/html等等),此时如果找不到默认文件web就会显示当前的目录结构。
ExecCGI
有需要执行的cgi文件或者脚本, 此对应上面的AddHandler选项
MultiViews
这个误解比较多,很多筒子望文生义。这里纠正一下,它的意思其实是 “多重匹配” 。
比方说用户访问你的web下的http://example.com/start ,结果apache server找了一圈也没发现start,一般情况server就会直接丢给用户一个大大的 ”Not found“, 但是如果你设置了 +MultiViews ,apache就会继续匹配所有start . * 如果刚好有一个start.gif或者start.html那么这个文件就会被显示/执行。这个功能看似智能,实则安全隐患多多,因此一般的配置中这个选项都是被关闭的。所以一般如果你不是很明白最好是disable此项。
FollowSymLinks
由于文件权限问题,通常我们都会把一些文件从其他地方做一个链接放到web目录下,那么就需要enable这个选项
SymLinksIfOwnerMatch
这个选项是对FollowSymLinks进行一些限制,就是要求当前web下面的链接文件和源文件属于同一所有者。
比如 /var/www/my/web/connfig.cgi 是一个link指向 /home/myhome/config.cgi
那么如果/home/myhome/config.cgi的所属是admin 那么/var/www/my/web/connfig.cgi也必须是admin。
Alias / /var/www/my/web
设置快速链接,原先用户访问http://example.com/my/web/index.html现在只需要http://example.com/index.html就可以了
ScriptAlias
和Alias类似,不同的是ScriptAlias还可以限定了目录下的可执行脚本
ScriptAlias / /var/www/my/web/
只有web目录下的脚本可以被执行。ScriptAlias / /var/www/my/web/index.cgi
只有index.cgi可以执行,目录下其他的可执行文件就都不能执行了。