1. Apache配置系统
从整体来看apache的配置系统包括三个部分:
(1) 配置文件:比如 httpd.conf .htaccess
(2) 配置指令:在配置文件 httpd.conf .htaccess 里面的任意一行都是一个配置指令
(3) 配置信息的保存和读取:配置信息配置完成后会在Apache里面按照一定的数据结构进行保存,在Apache的运行过程中,任何需要配置信息的时候就去读取并执行。
2. Apache的配置文件
(1) httpd.conf:是Apache的主配置文件,通常位于$ServerRoot 目录下的conf目录中;httpd.conf文件修改后只有在httpd重启后才重新读取,所以修改httpd.conf必须要重启Apache才有效。
(2) .htaccess:http.conf 文件通常用于Apache 控制全局的配置信息,httpd.conf 提供了对某一个或多个目录控制,但是当目录增加到很多时,httpd.conf会急剧膨胀,也会吃不消的;所以,可用用.htaccess 文件对指定的目录进行命令控制。.htaccess 文件位于想要控制的目录中,可以对此目录以及所有子目录设置授权、目录索引(?)、过滤器及其他的控制命令。 注:可以用 AccessFileName 对 .htaccess 进行重新命名, AccessFileName .direaccess ,但一般情况下不要修改。
(3) access.conf srm.conf :在apache1.3 以前的版本存在这两个文件,在apache2.0以后就删了。
注:httpd.conf access.conf srm.conf 是在Apache启动或重启时候就读取并执行里面的配置命令,但.htaccess 在apache运行过程中需要的时候才读取里面的配置命令。
3. Apache配置指令相关概念
(1) 指令概述
Apache的配置指令可以分为两类:简单指令和配置段指令
简单指令就是单行是一个指令:ServerLimit 200 表示Apache最大启动进程数量是 200
配置段指令:<...> ......</...>
- <Directory "/usr/local/test">
- Options Indexs
- ......
- ......
- </Directory>
这就是一个配置段命令,这里面的配置命令只对 /usr/local/test 有效。
(2) 指令参数
- URL: http-->协议 是 hostname, path/to/file.html 请求文件网络路径
- URL-path:URL中主机名之后的部分 /path/to/file.html 注:这个是表示请求资源在网络空间中的路径,映射到web服务器对应资源的物理路径
- file-path:指文件在web服务器文件系统中的决定路径 /usr/local/apach/htdocs/path/to/file.html ,如果不是以 / 开始,则ServerRoot为根目录
- directory-path:木在文件系统中的决定路径
- filename:文件名 file.html
- extension:指 filename中最后一个 . 后面的部分 比如: file.html.en 则,html en 都是 extension(后缀)
- MIME-type:描述文件的类型 比如:text/html img/jpeg 等
(3) 指令上下文:
配置文件中的各个配置指令具有不同的作用范围,根据作用范围不同可以分为 主配置、虚拟主机配置、局部配置和条件配置。
- 主配置:httpd.conf (access.conf srm.conf )中的非配置段指令
- 虚拟主机指令:<VirtualHost> ......</VirtualHost> 里面的配置指令集就是虚拟主机指令
- 局部指令:局部指令可以分为两类,一种是配置段指令,一种是通过 .htaccess 配置的指令,指对某一个目录有效
- 条件指令:在特定的条件下才会生效,比如:<IfDefine> ....</IfDefine> 等
注:常见的配置段指令是针对指定的文件系统和网络空间来设置指令的;文件系统:就是web服务器本机实实在在存在的物理路径 /usr/local/test ;而 网络空间是 client请求网页的 最后一部分内容 中 /huodong/youhuai/test.html 只是一个路径,可能在 HTTP请求处理中对次路径进行 转换 或这 rewrite 操作转到别的url,所以并不一定映射到 文件系统对应的文档。
(4)文件系统容器
<Directory> <Files> 是对web服务器上特定的文件目录进行对应的设置
- <Directory /var/web/dir>
- Options +Indexes
- </Directory>
- <Directory /var/web/dir>
- <Files private.html>
- order allow,deny
- Allow from IP1~IP2
- Deny from all
- </Files>
- </Directory>
设置目录 /var/web/dir 以及子目录中的 private.html 文件的访问权限。
(5) 网络空间荣器
<Location> 设置特定的网络空间
- <Location /private>
- Order allow,deny
- </Location>
对 网络空间中以 private 开头的URL进行设置访问权限
比如: 这些网络空间设置访问权限
注:在设置存在的文件系统时候就用文件系统容器,如果设置不存在的文件目录就用网络空间容器(须有数据库生成的动态网页)
上面这些指令都有对应的适用范围(特定的目录),把这些设置指令使用范围的语句(指令)叫上下文 (配置段就是上下文的一种)
上下文,我们说了有5种: Directory Files Limit(allow、deny) Location VirtualHost .htaccess ,他们之间可以进行嵌套:
VirtualHost里面可以放 Driectory Files Location Limit ;Directory 里面可以有 Files Limit Files 可以放Limit .htaccess 可以放 Files Limit Locaton 里面什么也不能放
(5) 指令位置:一些指令只能出现在对应的上下文环境中,我们把控制指令能出现的位置叫指令位置控制,如果发现指令出现在不应该出现的位置,apache会报错。
普通文件的配置选项:
- ACCESS_CONF:允许指令出现这Directiory Location 区间以内的顶级命令区,一般是用来设置特定文的指令控制
- RSRC_CONF: 允许指令出现在 Directiory Location 区间以外的顶级命令区
Apache执行指令的过程:Apache会先读取对应的配置文件,把所有的配置指令读取到一个配置树,Apache才会遍历并处理所有的指令,然后一步一步的执行指令。
4. 目录级别位置选项
(1) .htaccess 文件指令的控制:对于任何一个文件系统 /var/web/dir 都可以用一个 .htaccess 文件来完成对这个文件目录及其子目录的设置,而且这个设置可以热启动,即:用修改后不用重新启动httpd 服务就能起作用,httpd服务会实时更新.htaccess 文件并执行新的指令;但是.htaccess 指令相当于 变相的修改 httpd.conf 主配置文件中的 <Directory /var/web/dir> 文件的设置,所以必须设置在 .htaccess文件可以修改的指令,控制其权限;这样就必须在httpd.conf 文件中对 特定的目录 (比如:/var/web/dir) 的.htaccess 进行指令权限设置,具体设置在 httpd.conf 中设置:
- <Directory /var/web/dir>
- AllowOverride None/ALL/ Indexs AuthConfig
- Options ALL/Indexes FollowSymLinks
- </Directory>
上面的 AllowOverride (允许修复改写权限设置),就是对 /var/web/dir 里面的.htaccess 文件能用的指令进行设置,AllowOverride 选项(参数)如下:
- None:在.htaccess 文件中不能使用任何指令来修复 httpd.conf 中的配置文件,就是通过.htaccess 文件不能实现当前目录的设置修改(.htaccess 完全失效)
- ALL:.htaccess 文件中所有的指令都可以修复 httpd.conf 文件,实现对当前目录的设置
- AuthConfig:允许在 .htaccess 文件中使用与认证授权相关的指令,可以实现对特定网页用户和密码的复写
- Indexes:允许在 .htaccess 文件中使用控制目录索引的指令
- Limit:允许在 .htaccess 文件中使用控制主机访问的指令(allow deny order等)
(2) Options 是指定在特定的目录 /var/web/dir 将使用服务器的相关特性,就是这个目录/var/web/dir内能进行的操作,就是对此目录进行权限设置
Options选项如下:
- ALL:出 多重视图(MultiViews之外的所有特性)
- ExecCGI:允许使用 mod_cgi 执行CGI脚本
- FollowSymLinks:允许使用符号链接
- Includes:允许使用 mod_include 提供的 SSI (Server-Side Include) 功能,发送给服务器的一些指示
- IncludesNOEXEC (???)
- Indexes:如果clietn请求一个首页,但是在指定的目录 /var/web/dir 中没有这个首页,就会在client线上一个文件列表,类似:ftp站点的文件列表
注:Options 还有 + — ,具体的含义就是要对当前目录的特性进行新增和删除
- <Directory /var/web/dir>
- Options +Indexes -FollowSymLinks
- </Directory>
这样就是对 /var/web/dir 新增 Indexes特性,删除 FollowSymLinks 特性。
For example:借助.htaccess 实现对指定网页进行密码访问
a) 在httpd.conf 中设置网页所在目录可以使用 .htaccess 设置权限 AuthConfig
- <Directory /var/www/html/protect>
- AllowOverride AuthConfig
- Options Indexes
- </Directory>
cd /var/www/html/protect
vi .htaccess
- <Directory>
- AuthName "Protect webpage by .htaccess
- Authtype Basic
- AuthUserFile /var/www/apache.passwd
- require user shuming
- </Directory>
AuthName:在出现输入帐号与密码的对话框中,线上此提示字符: Protect webpage by .htaccess
Authtype:认证的类型,basic是指 Apache默认的类型
AuthUserFile:保护目录所使用的帐号密码的设置文件,就是当我们输入帐号和密码时通过此文件里面的帐号和密码进行验证
require :指定可以访问网页的帐号 shuming test test1 .....
c) 建立 .htaccess 里面需要的密码文件并设置能访问此网页的 帐号和密码:
直接用指令来完成:
htpasswd -c /var/www/html/apache.passwd shuming
New password: 111111
Re-type new password:111111
然后查看文件:
cat /var/www/html/apache.passwd ------> shuming:Fiquw/....is4 ;在 设置密码时候会自动对密码进行加密
借助这个例子可以重复理解,httpd.conf .htaccess 直接的关系,以及对二者的应用。