Apache服务器的基本配置,对于一般用户来说已经基本可以满足需求了。但对于一些有特殊需求的用户可通过Apache的高级管理配置学习来找到答案。
在httpd.conf文件中,通常用到的有4种访问存取控制的方法。
<Directory >…</Directory >
<Files>…</Files>
<Limit>…</Limit>
<Location>…</Location>
上面4种方法针对的对象各有不同,<Directory >是针对目录存取控制的;<Files>是针对文件的;<Limit>是针对路径进行存取控制的;<Location>主要是针对URL的。虽然针对对象不同但是配置方法却基本相同。
下面以<Directory >为例进行配置。Apache将目录分割成一个一个的单元来进行存取控制,每个目录在httpd.conf文件中使用一个段落,首先是/(根)目录。默认为:
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
在<Directory >中设置路径为/(根)目录,每个段落都由<Directory >的标识符括起来,后面的标识符要加“/”。其中最主要的一些选项是Options、AllowOverride、Allow/Deny、Order等。
Options用来说明一些主要的设置,具体参数如表5-1所示。
表5-1 Options参数设置说明
Options参数 |
功能说明 |
All |
除MultiViews以外,所有特性都开启 |
ExceCGI |
允许在此目录中执行CGI程序 |
FllowsymLinks |
服务器将使用符号链接,存取不在该目录中的任何文件或目录,此参数若是设在<Location>区块中则无效 |
续上表
Optons参数 |
功能说明 |
Includes |
允许服务器使用SSI功能 |
IncludesNOEXEC |
允许使用SSI功能,但不允许执行CGI script中的#exec和#include命令 |
Indexs |
服务器可生成此目录中的文件列表 |
MultiViews |
使用内容商议功能,经由服务器和网页浏览器相互沟通协调后,决定网页传送的性质,例如网页浏览器请求优先送出法文版网页内容。此功能并未包括在All之内,需要另外加上 |
None |
不允许访问此目录 |
SynLinksIfOwnerMatch |
假如符号链接所指向的文件或目录拥有者和当前用户账号相符合,则服务器就会通过符号链接访问不在该目录下的文件或目录。若此参数设在<Location>区块中,则无效 |
Options可同时有多个参数,如:
Options Index FollowsymLinkes
如果有多行Options,以最后的Options为主。
例如:
Options Indexs
Options Fllowsymlinks
则只会允许Fllowsymlinks。如果感觉功能不够或过多,要在既有的参数上增加或减少允许参数,可以使用“+”或“-”来实现。
例如:
Options +ExecCGI
则在原有的参数上增加了ExecCGI选项。
AllowOverride定义是否允许各个目录用.htpaccess文件覆盖。它的参数如表5-2所示。
表5-2 AllowOverride参数设置说明
参 数 |
功能说明 |
AuthConfig |
允许使用AuthName、AuthType、AuthUserFile、AuthGroup和Require |
FileInfo |
允许使用AddType、AddEncoding、AddLanguage |
Limit |
允许使用Limit选项,能够使用主机名或IP地址来控制存取 |
Options |
允许使用Options项 |
ALL |
允许使用所有项 |
None |
禁止使用所有项 |
它的作用为设置先后顺序,是先执行Allow还是先执行Deny。如果是Order allow deny则表示先执行allow;而如果是Order deny allow 则表示先执行deny。例如:
Order allow deny
Allow from all
Deny from 192.168.0.30
按照Order顺序。表示是先执行Allow再执行Deny,则先允许所有主机访问,再拒绝IP地址为192.168.0.30的主机访问。
Allow/Deny命令的作用为允许或拒绝某主机访问。
Apache可以基于用户认证来限制用户对Web服务器的访问,只允许经过授权的用户进行访问。用户必须输入正确的用户名和密码才能正常访问。通常用AuthConfig中包含的命令来进行配置。
由AuthConfig中包含的选项是Apache的认证配置指令,各项指令的功能如表5-3所示。
表5-3 Apache的认证配置指令
指 令 |
说 明 |
指 令 |
说 明 |
AuthName |
定义受保护领域的名称 |
AuthUserFile |
指定认证口令文件的位置 |
AuthType |
定义私用的认证方式 |
AuthGroup |
指定认证组文件的位置 |
使用了认证指令配置后,还需要为指定的用户或组进行授权。为用户或组进行授权的指令是Require。Require指令的3种使用格式如表5-4所示。
表5-4 Apache的授权配置指令的使用格式
指令语法格式 |
说 明 |
Require 用户名[用户名] |
授权给制定的一个或多个用户 |
Require 组名[组名] |
授权给指定的一个或多个组 |
Require valid-user |
授权给认证口令文件中的所有用户 |
下面来讲述一下文本文件的认证口令文件和认证组文件。
(1)创建新的认证口令文件。可以使用如下命令,在添加一个认证用户的同时创建认证口令文件:
#htpasswd –c 认证口令文件名 用户名
(2)修改认证口令文件。使用下面命令,向口令文件中添加用户或修改已存在的用户口令:
#htpasswd 认证口令文件 用户名
(3)认证口令文件的格式。认证口令文件中的每一行都包含一个用户的用户名和经过加密的口令。
用户名: 加密的口令
需要注意的是基于安全方面的考虑,认证口令文件和认证组文件不应该与Web文档存放于相同的目录下。
下面在.hatccess文件中配置认证和授权。例如:
(1)先修改主配置文件,在命令行中输入以下命令。
#vi /etc/httpd/conf/httd.conf
(2)将/var/www/html/prvate目录的访问权限设为:
<Directory "/var/www/html/prvate ">
//允许在.htaccess文件中使用认证和授权指令
AllowOverride AuthConfig
<Directory>
(3)重新启动httpd。
#service httpd resrart
(4)创建认证口令问文件,并添加两个用户。
#mkdir /var/www/passwd
#cd /var/www/passwd
#htpassed –c internet liu
New password:
Re-type new password:
Adding password for user liu
#htpasswd internet zhang
New password:
Re-type new password:
Adding password for user zhang
#
(5)将认证口令的文件的属主改为apache。
#chown apache.apache jamond
(6)重启httpd。
提示:上面程序中internet为领域,liu和zhang为用户名。
当浏览器访问Web站点的时候,Web站点上的网页通常会包含不同的对象,包括HTML文件、图片、声音文件以及脚本文件等等。为了能够正常显示这些对象,浏览器必须从Web服务器获取这些对象的消息。一个JPEG图片与最为常见的文本文件在浏览器上处理起来是不同的。服务器以MIME类型的方式提供这种信息给浏览器。网页上的每种对象都和某种给定的MIME类型有关,通过MIME类型,浏览器才能正确处理和显示这些对象。
MIME协议将某个特定的类型和具有特定文件、特定扩展名的文件对应起来。例如:扩展名为.jpg的文件就会有MIME类型image/jpep。指令TypeConfig保存有文件mime.types的位置,它列出了所有的MIME类型和对应的文件扩展名。DefaultType是为其类型不能辨认的文件提供的一种默认的MIME类型。AddType能够修复mime.type类型,而不需要编辑MIME文件。
TypesConfig /etc/mime..type
DefaultType text/plain
其他类型指令可以用来指定特定文档应用的动作。AddEncoding能使浏览器在空闲时对压缩文件进行解压。AddHandler可以依照文件扩展名采取相应的动作。借助于AddLanguage,能够为文档指定语言类型。在下面的例子中,用扩展名.gz标记的文件表示的是gzip编码文件;用扩展名.fr标记的文件表示的是法语文件。
AddEncoding x-gzip.gz
AddLanguage fr.fr
Web服务器能够显示并执行多种不同类型的文件和程序。
公共网关接口(CGI)文件是网络浏览器在访问站点时所要执行的程序。是网页服务器与其他程序沟通的接口,这些程序一般较常用C或Perl语言来编写。公共网关接口文件通常由Web页面初始化,页面执行这些程序作为要显示的内容的一部分。有两种使用CGI脚本功能的方式:一种方式是把CGI脚本文件的后缀改为.cgi;另一种方式是建立脚本子目录,通常叫做cgi-bin。
CGI的程序是在服务器上执行,有可能会因为程序设计者的有心破坏或疏忽,而威胁到服务器的安全。因此通常服务器管理者会将所有CGI的程序,放在同一个目录一起管理。而且此目录不会放在网站的根目录中,以免因失误而让有心者通过网址,直接读取程序的目录。
为了避免客户端知道程序存放的根目录,通常会另外建一个目录的别名。如此当网页通过CGI执行程序时,出现在网页上的程序路径则是已经改过的别名路径。在http.conf文件来设定目录的别名:
ScriptAlias /cgi-bin/ "/var/www /cgi-bin/"
其中cgi-bin为路径的别名,/var/www /cg-bin/为程序存放的路径。
另外,存放程序的目录也要按照需求设定适当的权限:
<Directory "/var/www /cgi-bin/">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>