一. apache简介:
apache是世界排名第一的web服务器, 根据netcraft(www.netsraft.co.uk)所作的调查,世界上百分之五十以上的web服务器在使用apache.
1995年4月, 最早的apache(0.6.2版)由apache group公布发行. apache group 是一个完全通过internet进行运作的非盈利机构, 由它来决定apache web服务器的标准发行版中应该包含哪些内容. 准许任何人修改隐错, 提供新的特征和将它移植到新的平台上, 以及其它的工作. 当新的代码被提交给apache group时, 该团体审核它的具体内容, 进行测试, 如果认为满意, 该代码就会被集成到apache的主要发行版中.
apache 的特性:
1) 几乎可以运行在所有的计算机平台上.
2) 支持最新的http/1.1协议
3) 简单而且强有力的基于文件的配置(httpd.conf).
4) 支持通用网关接口(cgi)
5) 支持虚拟主机.
6) 支持http认证.
7) 集成perl.
8) 集成的代理服务器
9) 可以通过web浏览器监视服务器的状态, 可以自定义日志.
10) 支持服务器端包含命令(ssi).
11) 支持安全socket层(ssl).
12) 具有用户会话过程的跟踪能力.
13) 支持fastcgi
14) 支持java servlets.
...
缺点(maybe it is, maybe not):
apache没有为管理员提供图形用户接口(gui), 但最近的apache版本已经有了gui的支持.
以下是apache的许可证
/* ====================================================================
* the apache software license, version 1.1
*
* copyright (c) 2000 the apache software foundation. all rights
* reserved.
*
* redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. the end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* this product includes software developed by the
* apache software foundation (http://www.apache.org/).
* alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. the names apache and apache software foundation must
* not be used to endorse or promote products derived from this
* software without prior written permission. for written
* permission, please contact apache@apache.org.
*
* 5. products derived from this software may not be called apache,
* nor may apache appear in their name, without prior written
* permission of the apache software foundation.
*
* this software is provided ``as is and any expressed or implied
* warranties, including, but not limited to, the implied warranties
* of merchantability and fitness for a particular purpose are
* disclaimed. in no event shall the apache software foundation or
* its contributors be liable for any direct, indirect, incidental,
* special, exemplary, or consequential damages (including, but not
* limited to, procurement of substitute goods or services; loss of
* use, data, or profits; or business interruption) however caused and
* on any theory of liability, whether in contract, strict liability,
* or tort (including negligence or otherwise) arising in any way out
* of the use of this software, even if advised of the possibility of
* such damage.
* ====================================================================
*
* this software consists of voluntary contributions made by many
* individuals on behalf of the apache software foundation. for more
* information on the apache software foundation, please see
* .
*
* portions of this software are based upon public domain software
* originally written at the national center for supercomputing applications,
* university of illinois, urbana-champaign.
*/
可以看出, apache不要求任何人把对apache的修改公开(不受gpl条款约束).
二. apache的基本配置及说明:
1.获得apache:
获得apache源代码最方便的方法是到http://www.apache.org,选择最新的版本。然后,
tar xvzf apache_x.x.xx.tar.gz
2. 编译apache
在src目录下
./configure 可用 ./configure--help|less 得到帮助,
make, make install, install
3. apache的启动和关闭
sbin/apachectl start
sbin/apachectl stop
sbin/apachectl restart (重起)
4. 一些模块介绍:
下列的组模块控制进入和验证
acess 进入控制
auth 检查unix-style口令和组文件的基本的验证。
auth-anon 使用匿名的ftp-style usernames和口令。
auth-dbm 使用berkeley db文件存储usernames,口令,和组信息。如果你有很多usernames并关心性能, 这是很有用的。
digest 使用http文摘认证,这比基本认证更安全。
expire 模块让你定制expire过期时间
5. apache1.3的缺省目录布局是:
./bin
服务器二进制,apachectl原本
./conf
apache配置文件
./include/apache
apache标题文件
./libexec
共用的对象文件
./man
man 页
./sbin
服务器二进制,apachectl原本,log rotator
./cgi-bin
缺省cgi原本/二进制的目录
./share/htdocs
缺省文件根
./htdocs/manual
apache手册
./share/icon
包含各种图标gifs的目录
./var/apache/log
log文件的目录
./var/apache/proxy
proxy缓存目录
./var/apache/run
httpd.pid(包含主要的httpd过程标识符的文件)在此目录
6. 主要文件如下:
httpd.conf, 在/usr/local/apache/conf或/etc/httpd/conf下
apachectl, 在/usr/local/apache/bin或/etc/httpd/bin下
access_log, 纪录用户访问信息, 在../logs里
error_log, 纪录用户访问错误信息, 也在../logs里
7. httpd.conf 基本设置
port, apache 在哪一个 tcp 端口进行侦听,http 的默认端口为 80。如果你使用其它端口,你不得不在 urls 中指定端口来连接你的服务器,
user,group 由于安全上的原因,在 linux 上,可以通过把 user 和 group 都设置成 nobody
serverroot 参数应该是 apache 安装的基础。除非你移动了周围的资料,否则其值与你所给定的值一样。
servername, 如果你的机器有多个名称或者 ip 地址,设置 apache 表征服务器的名称。
documentroot 是 web 树的根目录,
userdir 在启用 ~username 处理请求时, 此指令告诉 apache 哪个目录追加到用户的主目录(home)。userdir 被设置为 public_html。用户将只有基本的网页服务功能,
是一个容器指令。格式的结束指令。
及相关的和指令的目的,是为了让你在每个目录或者每个文件的基础上,控制apache行为的方式。指令放在中,也适用于子目录。
followsymlinks选项,告诉 apache 它可以从文档根目录内部到文档根目录外部跟踪符号链接。在文档根目录内部,followsymlinks 和 indexes 都处于开启状态(on)。万一缺省的索引文件(通常为 index.html)不存在时,最后允许目录列表显示。
directory 中,用 options 指令你可以控制什么选项是被允许的。
options 指令:
1) execcgi cgi 脚本程序能够运行于该目录树。
2) followsymlinks 在该目录中,服务器将跟踪符号链接。注意:即使服务器跟踪符号链接,它也不会改变用来匹配不同区域的路径名。注意:如果在区域内设置,该选项会被忽略。
3) includes 服务器端包容被允许。
4) includesnoexec 服务器端引用被允许,但 #exec 命令和 cgi 脚本程序的 #include 被禁止。
5) indexes 如果要求映射到目录的 url 和在该目录里没有 directoryindex(例如,index.html),那么服务器将返回格式化的目录列表。
6) multiviews 处理多重浏览内容被允许。
7) symlinksifownermatch 通过与用户 id 一样的链接,服务器只跟踪目标文件或者目录所拥有的符号链接。
8) all 除 multiviews 外的一切东西。要是没有 options 指令,默认为all.
accessfilename 命令来设置(缺省设置为 .htaccess)。在任何目录中,apache 配置指令可被放入一个叫做 .htaccess 的文件。指令也可应用于目录里的子目录。在访问文件中,
allowoverride 控制哪个指令将被使用。如果 allowoverride 被设置为 none。apache 甚至不会检查访问文件。
allowoverride 参数:
1) authconfig, 授权指令哪一个允许使用;
2) fileinfo,用来控制文档类型和处理方法的指令;
3)indexes,使用其中的一个指令来控制目录列表、图标等的显示;
4) limit,允许使用指令来控制主机访问;
5) options,使用 options 指令中的一个。
“allow”和“deny”指令就是用来控制访问的。第三个指令“order”,控制这些指令的使用顺序。如果你把顺序设置成 allow,deny,而没有指定哪个主机是被拒绝的话,则所有主机都被假定为禁止访问。在本例子中,allow 指令被选中,deny 指令被普遍应用。在 .htaccess 文件或者 指令内,更多典型的配置可能是:
order allow,deny
allow from all
deny aaa.com
所有主机被允许,除了那些来自 aaa.com 域的主机。
如果相反,
order deny,allow
deny from all
allow from 11.23.44
deny 首先被检查。只有来自 11.23.44 ip 网络的主机才被允许访问。它也可能指定网络掩码,参数 11.23.44.0/255.255.255.0 相当于上面的例子。
三. 特殊配置:
1. 支持用户个人主页:
在../conf/httpd.conf中加入
userdir /home/*/public_html
设置用户可以使用cgi等:
options execcgi
sethandler cgi-bin #如果在全局设置了addhandler cgi-bin .cgi ...,
#这儿就不用设了
2. 虚拟主机设置:
1)基于ip的虚拟主机
若该机器的ip地址为192.168.0.2,虚拟的ip为192.168.0.3
首先, 在一台机器的网卡上绑定多个ip地址去服务多个虚拟主机。
#/sbin/ifconfig eth0:0 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.11.255 up
#/sbin/route add -host 192.168.0.2 eth0:0
设置../conf/httpd.conf文件:
看documentroot是什么, 如果为/home/httpd
documentroot /home/httpd/aaa
创建目录
/home/httpd/aaa,
2)基于名字的虚拟主机:
编辑../conf/httpd.conf
namevirtualhost 192.168.0.2
documentroot /home/httpd/aaa
servername aaa.yourdomain.com
要有namevirtualhost在最前面,下面依次为各个虚拟主机,
还需要把aaa.yourdomain.com的dns都指向ip地址192.168.0.2
3. apache用户认证
基本的apache用户认证
假定, 对目录/home/aaa下的文件需要做到用户认证,在httpd.conf
中加入下面的行
allowoverride authconfig
order allow,deny
allow from all
用在目录/home/aaa下放文件.htaccess,内容如下:
authname please give me your id number and password
authtype basic
authuserfile /etc/.passwd
require valid-user
用htpasswd 生成文件/etc/.passwd,
htpasswd -c /etc/.passwd usernam