Apache服务器
![](/icons/6052de.gif)
设置文件位于/usr/local/etc/apache目录下
![](/icons/6052dou.gif)
传统上使用 3个配置文件httpd.conf,access.conf和srm.conf
![](/icons/6052dou.gif)
来配置Apache服务器
![](/icons/6052de.gif)
行为
![](/icons/6052dou2.gif)
httpd. conf提供了最基本
![](/icons/6052de.gif)
服务器配置
![](/icons/6052dou.gif)
是对守护
![](/icons/6052chengxu.gif)
httpd如何运行
![](/icons/6052de.gif)
技术描述;srm.conf是服务器
![](/icons/6052de.gif)
资源映射文件
![](/icons/6052dou.gif)
告诉服务器各种文件
![](/icons/6052de.gif)
MIME类型
![](/icons/6052dou.gif)
以及如何支持这些文件;access.conf用于配置服务器
![](/icons/6052de.gif)
访问权限
![](/icons/6052dou.gif)
控制区别用户和计算机
![](/icons/6052de.gif)
访问限制;这 3个配置文件控制着服务器
![](/icons/6052de.gif)
各个方面
![](/icons/6052de.gif)
特性
![](/icons/6052dou.gif)
因此为了正常运行服务器便需要设置好这 3个文件
![](/icons/6052dou2.gif)
除了这 3个设置文件的外
![](/icons/6052dou.gif)
Apache还使用mime.types文件用于标识区别文件对应
![](/icons/6052de.gif)
MIME类型
![](/icons/6052dou.gif)
magic文件设置区别MIME类型文件
![](/icons/6052de.gif)
![](/icons/6052yi.gif)
些特殊标识
![](/icons/6052dou.gif)
使得Apache服务器从文档后缀不能判断出文件
![](/icons/6052de.gif)
MIME 类型时
![](/icons/6052dou.gif)
能通过文件内容中
![](/icons/6052de.gif)
这些特殊标记来判断文档
![](/icons/6052de.gif)
MIME类型
![](/icons/6052dou2.gif)
bash-2.02$ ls -l /usr/local/etc/apache
total 100
-rw-r--r-- 1 root wheel 348 Apr 16 16:01 access.conf
-rw-r--r-- 1 root wheel 348 Feb 13 13:33 access.conf.default
-rw-r--r-- 1 root wheel 30331 May 26 08:55 httpd.conf
-rw-r--r-- 1 root wheel 29953 Feb 13 13:33 httpd.conf.default
-rw-r--r-- 1 root wheel 12441 Apr 19 15:42 magic
-rw-r--r-- 1 root wheel 12441 Feb 13 13:33 magic.default
-rw-r--r-- 1 root wheel 7334 Feb 13 13:33 mime.types
-rw-r--r-- 1 root wheel 383 May 13 17:01 srm.conf
-rw-r--r-- 1 root wheel 357 Feb 13 13:33 srm.conf.default
事实上当前版本
![](/icons/6052de.gif)
Apache将原来httpd.conf、srm.conf和access.conf中
![](/icons/6052de.gif)
所有配置参数均放在了
![](/icons/6052yi.gif)
个配置文件httpd.conf中
![](/icons/6052dou.gif)
只是为了和以前
![](/icons/6052de.gif)
版本兼容
![](/icons/6052de.gif)
原因(使用这 3个设置文件
![](/icons/6052de.gif)
方式来源于NCSA-httpd)
![](/icons/6052dou.gif)
才使用 3个配置文件
![](/icons/6052dou2.gif)
而提供
![](/icons/6052de.gif)
access.conf和srm.conf文件中没有具体
![](/icons/6052de.gif)
设置
![](/icons/6052dou2.gif)
新版本Apache使用
![](/icons/6052de.gif)
配置文件为apache.conf
![](/icons/6052dou.gif)
它就等价于httpd.conf
![](/icons/6052dou2.gif)
由于在新版本
![](/icons/6052de.gif)
Apache中
![](/icons/6052dou.gif)
所有
![](/icons/6052de.gif)
设置都被放在了httpd.conf中
![](/icons/6052dou.gif)
因此只需要调整这个文件中
![](/icons/6052de.gif)
设置
![](/icons/6052dou2.gif)
以下使用缺省提供
![](/icons/6052de.gif)
httpd.conf为例
![](/icons/6052dou.gif)
解释Apache服务器
![](/icons/6052de.gif)
各个设置选项
![](/icons/6052dou2.gif)
然而不必
![](/icons/6052yinwei.gif)
它提供设置
![](/icons/6052de.gif)
参数太多而烦恼
![](/icons/6052dou.gif)
基本上这些参数都很明确
![](/icons/6052dou.gif)
也可以不加改动运行Apache服务器
![](/icons/6052dou2.gif)
但如果需要调整Apache服务器
![](/icons/6052de.gif)
性能
![](/icons/6052dou.gif)
以及增加对某种特性
![](/icons/6052de.gif)
支持
![](/icons/6052dou.gif)
就需要了解这些设置参数
![](/icons/6052de.gif)
含义
![](/icons/6052dou2.gif)
有关Apache服务器
![](/icons/6052de.gif)
性能
![](/icons/6052dou.gif)
在Internet上存在很大
![](/icons/6052de.gif)
争议
![](/icons/6052dou.gif)
基本上使用过Apache
![](/icons/6052de.gif)
使用者几乎都不怀疑它
![](/icons/6052de.gif)
优秀性能
![](/icons/6052dou.gif)
Apache也支撑了很多著名
![](/icons/6052de.gif)
高负载
![](/icons/6052de.gif)
网站WebSite
![](/icons/6052dou.gif)
但是在商业机构
![](/icons/6052de.gif)
评测中
![](/icons/6052dou.gif)
Apache往往得分不高
![](/icons/6052dou2.gif)
很多人指出
![](/icons/6052dou.gif)
在这些评测中
![](/icons/6052dou.gif)
商业Web服务器及其操作系统往往由其专业公司
![](/icons/6052de.gif)
工程师进行过性能调整
![](/icons/6052dou.gif)
而Free
![](/icons/6052de.gif)
操作系统和Web服务器往往就使用其缺省配置或仅仅作很小
![](/icons/6052de.gif)
更改
![](/icons/6052dou2.gif)
需要指出
![](/icons/6052de.gif)
是
![](/icons/6052dou.gif)
除了操作系统
![](/icons/6052de.gif)
性能调整的外
![](/icons/6052dou.gif)
Apache 服务器本身
![](/icons/6052de.gif)
缺省配置绝不是最优化和最高效
![](/icons/6052de.gif)
![](/icons/6052dou.gif)
而是要适应几乎所有种类操作系统、所有种类硬件下
![](/icons/6052de.gif)
设置
![](/icons/6052dou.gif)
多平台
![](/icons/6052de.gif)
软件Software不可能为特定平台和特定硬件提供最优化
![](/icons/6052de.gif)
缺省配置
![](/icons/6052dou2.gif)
因此要使用Apache
![](/icons/6052de.gif)
时候
![](/icons/6052dou.gif)
性能调整是必不可少
![](/icons/6052de.gif)
![](/icons/6052dou2.gif)
在商业评测中忽略了
![](/icons/6052de.gif)
另
![](/icons/6052yi.gif)
个事实是
![](/icons/6052dou.gif)
评测时往往对区别种类
![](/icons/6052de.gif)
功能进行比较
![](/icons/6052dou.gif)
例如使用Apache
![](/icons/6052de.gif)
标准CGI
![](/icons/6052de.gif)
性能和ISAPI
![](/icons/6052dou.gif)
NSAPI等服务器端API比较
![](/icons/6052dou.gif)
事实上Apache服务器和此可以比较
![](/icons/6052de.gif)
功能为modperl
![](/icons/6052dou.gif)
FastCGI
![](/icons/6052dou.gif)
和ASP类似
![](/icons/6052de.gif)
功能为PHP3等等
![](/icons/6052dou.gif)
只不过由于Apache
![](/icons/6052de.gif)
开放模式
![](/icons/6052dou.gif)
这些功能是由独立
![](/icons/6052de.gif)
开发组
![](/icons/6052dou.gif)
作为独立
![](/icons/6052de.gif)
模块来实现
![](/icons/6052de.gif)
![](/icons/6052dou2.gif)
但是在评测中
![](/icons/6052dou.gif)
测试人员没有加入相应
![](/icons/6052de.gif)
模块评测其性能
![](/icons/6052dou2.gif)
- HTTP守护进程
运行参数
httpd.conf中首先定义了
![](/icons/6052yi.gif)
些httpd守护进程运行时需要
![](/icons/6052de.gif)
参数
![](/icons/6052dou.gif)
来决定其运行方式和运行环境
![](/icons/6052dou2.gif)
ServerType standalone
ServerType定义服务器
![](/icons/6052de.gif)
启动方式
![](/icons/6052dou.gif)
缺省值为独立方式standalone
![](/icons/6052dou.gif)
http d服务器将由其本身启动
![](/icons/6052dou.gif)
并驻留在主机中监视连接请求
![](/icons/6052dou2.gif)
在FreeBSD下将在启动文件/usr/local/etc /rc.d/apache.sh中自动启动Web服务器
![](/icons/6052dou.gif)
这种方式是推荐设置
![](/icons/6052dou2.gif)
启动Apache服务器
![](/icons/6052de.gif)
另
![](/icons/6052yi.gif)
种方式是inet方式
![](/icons/6052dou.gif)
使用超级服务器inetd监视连接请求并启动服务器
![](/icons/6052dou2.gif)
当需要使用inetd启动方式时
![](/icons/6052dou.gif)
便需要更改为这个设置
![](/icons/6052dou.gif)
并屏蔽/usr/local/etc/rc.d/apache .sh文件
![](/icons/6052dou.gif)
以及更改/etc/inetd.conf并重起inetd
![](/icons/6052dou.gif)
那么Apache就能从inetd中启动了
![](/icons/6052dou2.gif)
两种方式
![](/icons/6052de.gif)
区别是独立方式是由服务器自身管理自己
![](/icons/6052de.gif)
启动进程
![](/icons/6052dou.gif)
这样在启动时能立即启动服务器
![](/icons/6052de.gif)
多个副本
![](/icons/6052dou.gif)
每个副本都驻留在内存中
![](/icons/6052dou.gif)
![](/icons/6052yi.gif)
有连接请求不需要生成子进程就可以立即进行处理
![](/icons/6052dou.gif)
对于客户浏览器
![](/icons/6052de.gif)
请求反应更快
![](/icons/6052dou.gif)
性能较高
![](/icons/6052dou2.gif)
而 inetd方式要由inetd发现有连接请求后才去启动http服务器
![](/icons/6052dou.gif)
由于inetd要监听太多
![](/icons/6052de.gif)
端口
![](/icons/6052dou.gif)
因此反应较慢、效率较低
![](/icons/6052dou.gif)
但节约了没有连接请求时Web服务器占用
![](/icons/6052de.gif)
资源
![](/icons/6052dou2.gif)
因此inetd方式只用于偶尔被访问并且不要求访问速度
![](/icons/6052de.gif)
服务器上
![](/icons/6052dou2.gif)
事实上inetd方式不适合http
![](/icons/6052de.gif)
突发和多连接
![](/icons/6052de.gif)
特性
![](/icons/6052dou.gif)
![](/icons/6052yinwei.gif)
![](/icons/6052yi.gif)
个页面可能包含多个图象
![](/icons/6052dou.gif)
而每个图象都会引起
![](/icons/6052yi.gif)
个连接请求
![](/icons/6052dou.gif)
即使虽然访问人数造成教少
![](/icons/6052dou.gif)
但瞬间
![](/icons/6052de.gif)
连接请求并不少
![](/icons/6052dou.gif)
这就受到inetd性能
![](/icons/6052de.gif)
限制
![](/icons/6052dou.gif)
甚至会影响由inetd启动
![](/icons/6052de.gif)
其他服务器
![](/icons/6052chengxu.gif)
![](/icons/6052dou2.gif)
ServerRoot "/usr/local"
ServerRoot用于指定守护进程httpd
![](/icons/6052de.gif)
运行目录
![](/icons/6052dou.gif)
httpd在启动的后将自动将进程
![](/icons/6052de.gif)
当前目录改变为这个目录
![](/icons/6052dou.gif)
因此如果设置文件中指定
![](/icons/6052de.gif)
文件或目录是相对路径
![](/icons/6052dou.gif)
那么真实路径就位于这个ServerR oot定义
![](/icons/6052de.gif)
路径的下
![](/icons/6052dou2.gif)
由于httpd会经常进行并发
![](/icons/6052de.gif)
文件操作
![](/icons/6052dou.gif)
就需要使用加锁
![](/icons/6052de.gif)
方式来保证文件操作不冲突
![](/icons/6052dou.gif)
由于NFS文件系统在文件加锁方面能力有限
![](/icons/6052dou.gif)
因此这个目录应该是本地磁盘文件系统
![](/icons/6052dou.gif)
而不应该使用NFS文件系统
![](/icons/6052dou2.gif)
#LockFile /var/run/httpd.lock
LockFile参数指定了httpd守护进程
![](/icons/6052de.gif)
加锁文件
![](/icons/6052dou.gif)
![](/icons/6052yi.gif)
般不需要设置这个参数
![](/icons/6052dou.gif)
Apac he服务器将自动在ServerRoot下面
![](/icons/6052de.gif)
路径中进行操作
![](/icons/6052dou2.gif)
但如果ServerRoot为NFS文件系统
![](/icons/6052dou.gif)
便需要使用这个参数指定本地文件系统中
![](/icons/6052de.gif)
路径
![](/icons/6052dou2.gif)
PidFile /var/run/httpd.pid
PidFile指定
![](/icons/6052de.gif)
文件将记录httpd守护进程
![](/icons/6052de.gif)
进程号
![](/icons/6052dou.gif)
由于httpd能自动复制其自身
![](/icons/6052dou.gif)
因此系统中有多个httpd进程
![](/icons/6052dou.gif)
但只有
![](/icons/6052yi.gif)
个进程为最初启动
![](/icons/6052de.gif)
进程
![](/icons/6052dou.gif)
它为其他进程
![](/icons/6052de.gif)
父进程
![](/icons/6052dou.gif)
对这个进程发送信号将影响所有
![](/icons/6052de.gif)
httpd进程
![](/icons/6052dou2.gif)
PidFILE定义
![](/icons/6052de.gif)
文件中就记录httpd父进程
![](/icons/6052de.gif)
进程号
![](/icons/6052dou2.gif)
ScoreBoardFile /var/run/httpd.scoreboard
httpd使用ScoreBoardFile来维护进程
![](/icons/6052de.gif)
内部数据
![](/icons/6052dou.gif)
因此通常不需要改变这个参数
![](/icons/6052dou.gif)
除非管理员想在
![](/icons/6052yi.gif)
台计算机上运行几个Apache服务器
![](/icons/6052dou.gif)
这时每个Apache服务器都需要独立
![](/icons/6052de.gif)
设置文件htt pd.conf
![](/icons/6052dou.gif)
并使用区别
![](/icons/6052de.gif)
ScoreBoardFile
![](/icons/6052dou2.gif)
#ResourceConfig conf/srm.conf
#AccessConfig conf/access.conf
这两个参数ResourceConfig和AccessConfig
![](/icons/6052dou.gif)
就用于和使用srm.conf和access.conf设置文件
![](/icons/6052de.gif)
老版本Apache兼容
![](/icons/6052dou2.gif)
如果没有兼容
![](/icons/6052de.gif)
需要
![](/icons/6052dou.gif)
可以将对应
![](/icons/6052de.gif)
设置文件指定为/dev/null
![](/icons/6052dou.gif)
这将表示不存在其他设置文件
![](/icons/6052dou.gif)
而仅使用httpd.conf
![](/icons/6052yi.gif)
个文件来保存所有
![](/icons/6052de.gif)
设置选项
![](/icons/6052dou2.gif)
Timeout 300
Timeout定义客户
![](/icons/6052chengxu.gif)
和服务器连接
![](/icons/6052de.gif)
超时间隔
![](/icons/6052dou.gif)
超过这个时间间隔(秒)后服务器将断开和客户机
![](/icons/6052de.gif)
连接
![](/icons/6052dou2.gif)
KeepAlive On
在HTTP 1.0中
![](/icons/6052dou.gif)
![](/icons/6052yi.gif)
次连接只能作传输
![](/icons/6052yi.gif)
次HTTP请求
![](/icons/6052dou.gif)
而KeepAlive参数用于支持HTTP 1.1版本
![](/icons/6052de.gif)
![](/icons/6052yi.gif)
次连接、多次传输功能
![](/icons/6052dou.gif)
这样就可以在
![](/icons/6052yi.gif)
次连接中传递多个HTTP请求
![](/icons/6052dou2.gif)
虽然只有较新
![](/icons/6052de.gif)
浏览器才支持这个功能
![](/icons/6052dou.gif)
但还是打开使用这个选项
![](/icons/6052dou2.gif)
MaxKeepAliveRequests 100
MaxKeepAliveRequests为
![](/icons/6052yi.gif)
次连接可以进行
![](/icons/6052de.gif)
HTTP请求
![](/icons/6052de.gif)
最大请求次数
![](/icons/6052dou2.gif)
将其值设为0将支持在
![](/icons/6052yi.gif)
次连接内进行无限次
![](/icons/6052de.gif)
传输请求
![](/icons/6052dou2.gif)
事实上没有客户
![](/icons/6052chengxu.gif)
在
![](/icons/6052yi.gif)
次连接中请求太多
![](/icons/6052de.gif)
页面
![](/icons/6052dou.gif)
通常达不到这个上限就完成连接了
![](/icons/6052dou2.gif)
KeepAliveTimeout 15
KeepAliveTimeout测试
![](/icons/6052yi.gif)
次连接中
![](/icons/6052de.gif)
多次请求传输的间
![](/icons/6052de.gif)
时间
![](/icons/6052dou.gif)
如果服务器已经完成了
![](/icons/6052yi.gif)
次请求
![](/icons/6052dou.gif)
但
![](/icons/6052yi.gif)
直没有接收到客户
![](/icons/6052chengxu.gif)
![](/icons/6052de.gif)
下
![](/icons/6052yi.gif)
次请求
![](/icons/6052dou.gif)
在间隔超过了这个参数设置
![](/icons/6052de.gif)
值的后
![](/icons/6052dou.gif)
服务器就断开连接
![](/icons/6052dou2.gif)
MinSpareServers 5MaxSpareServers 10
在使用子进程处理HTTP请求
![](/icons/6052de.gif)
Web服务器上
![](/icons/6052dou.gif)
由于要首先生成子进程才能处理客户
![](/icons/6052de.gif)
请求
![](/icons/6052dou.gif)
因此反应时间就有
![](/icons/6052yi.gif)
点延迟
![](/icons/6052dou2.gif)
但是
![](/icons/6052dou.gif)
Apache服务器使用了
![](/icons/6052yi.gif)
个特殊技术来摆脱这个问题
![](/icons/6052dou.gif)
这就是预先生成多个空余
![](/icons/6052de.gif)
子进程驻留在系统中
![](/icons/6052dou.gif)
![](/icons/6052yi.gif)
旦有请求出现
![](/icons/6052dou.gif)
就立即使用这些空余
![](/icons/6052de.gif)
子进程进行处理
![](/icons/6052dou.gif)
这样就不存在生成子进程造成
![](/icons/6052de.gif)
延迟了
![](/icons/6052dou2.gif)
在运行中随着客户请求
![](/icons/6052de.gif)
增多
![](/icons/6052dou.gif)
启动
![](/icons/6052de.gif)
子进程会随的增多
![](/icons/6052dou.gif)
但这些服务器副本在处理完
![](/icons/6052yi.gif)
次HTTP请求的后并不立即退出
![](/icons/6052dou.gif)
而是停留在计算机中等待下次请求
![](/icons/6052dou2.gif)
但是空余
![](/icons/6052de.gif)
子进程副本不能光增加不减少
![](/icons/6052dou.gif)
太多
![](/icons/6052de.gif)
空余子进程没有处理任务
![](/icons/6052dou.gif)
也占用服务器
![](/icons/6052de.gif)
处理能力
![](/icons/6052dou.gif)
因此也要限制空余副本
![](/icons/6052de.gif)
数量
![](/icons/6052dou.gif)
使其保持
![](/icons/6052yi.gif)
个合适
![](/icons/6052de.gif)
数量
![](/icons/6052dou.gif)
使得既能及时回应客户请求
![](/icons/6052dou.gif)
又能减少不必要
![](/icons/6052de.gif)
进程数量
![](/icons/6052dou2.gif)
因此就可以使用参数MinSpareServers来设置最少
![](/icons/6052de.gif)
空余子进程数量
![](/icons/6052dou.gif)
以及使用参数MaxSpareServers 来限制最多
![](/icons/6052de.gif)
空闲子进程数量
![](/icons/6052dou.gif)
多余
![](/icons/6052de.gif)
服务器进程副本就会退出
![](/icons/6052dou2.gif)
根据服务器
![](/icons/6052de.gif)
实际情况来进行设置
![](/icons/6052dou.gif)
如果服务器性能较高
![](/icons/6052dou.gif)
并且也被频繁访问
![](/icons/6052dou.gif)
就应该增大这两个参数
![](/icons/6052de.gif)
设置
![](/icons/6052dou2.gif)
对于高负载
![](/icons/6052de.gif)
专业网站WebSite
![](/icons/6052dou.gif)
这两个值应该大致相同
![](/icons/6052dou.gif)
并且等同于系统支持
![](/icons/6052de.gif)
最多服务器副本数量
![](/icons/6052dou.gif)
也减少不必要
![](/icons/6052de.gif)
副本退出
![](/icons/6052dou2.gif)
StartServers 5
StartServers参数就是用来设置httpd启动时启动
![](/icons/6052de.gif)
子进程副本数量
![](/icons/6052dou.gif)
这个参数和上面定义
![](/icons/6052de.gif)
MinSpareServers和MaxSpareServers参数相关
![](/icons/6052dou.gif)
都是用于启动空闲子进程以提高服务器
![](/icons/6052de.gif)
反应速度
![](/icons/6052de.gif)
![](/icons/6052dou2.gif)
这个参数应该设置为前两个值的间
![](/icons/6052de.gif)
![](/icons/6052yi.gif)
个数值
![](/icons/6052dou.gif)
小于MinSpareServers和大于MaxS pareServers都没有意义
![](/icons/6052dou2.gif)
MaxClients 150
在另
![](/icons/6052yi.gif)
方面
![](/icons/6052dou.gif)
服务器
![](/icons/6052de.gif)
能力毕竟是有限
![](/icons/6052de.gif)
![](/icons/6052dou.gif)
不可能同时处理无限多
![](/icons/6052de.gif)
连接请求
![](/icons/6052dou.gif)
因此参数Maxclient s就用于规定服务器支持
![](/icons/6052de.gif)
最多并发访问
![](/icons/6052de.gif)
客户数
![](/icons/6052dou.gif)
如果这个值设置得过大
![](/icons/6052dou.gif)
系统在繁忙时不得不在过多
![](/icons/6052de.gif)
进程的间进行切换来为太多
![](/icons/6052de.gif)
客户进行服务
![](/icons/6052dou.gif)
这样对每个客户
![](/icons/6052de.gif)
反应就会减慢
![](/icons/6052dou.gif)
并降低了整体
![](/icons/6052de.gif)
效率
![](/icons/6052dou2.gif)
如果这个值设置
![](/icons/6052de.gif)
较小
![](/icons/6052dou.gif)
那么系统繁忙时就会拒绝
![](/icons/6052yi.gif)
些客户
![](/icons/6052de.gif)
连接请求
![](/icons/6052dou2.gif)
当服务器性能较高时
![](/icons/6052dou.gif)
就可以适当增加这个值
![](/icons/6052de.gif)
设置
![](/icons/6052dou2.gif)
对于专业网站WebSite
![](/icons/6052dou.gif)
应该使用提高服务器效率
![](/icons/6052de.gif)
策略
![](/icons/6052dou.gif)
因此这个参数不能超过硬件本身
![](/icons/6052de.gif)
限制
![](/icons/6052dou.gif)
如果频繁出现拒绝访问现象
![](/icons/6052dou.gif)
就介绍说明需要升级服务器硬件了
![](/icons/6052dou2.gif)
对于非专业网站WebSite
![](/icons/6052dou.gif)
不太在意对客户浏览器
![](/icons/6052de.gif)
反应速度
![](/icons/6052dou.gif)
或者认为反应速度较慢也比拒绝连接好
![](/icons/6052dou.gif)
就也可以略微超过硬件条件来设置这个参数
![](/icons/6052dou2.gif)
这个参数限制了MinSpareServers和MaxSpareServers
![](/icons/6052de.gif)
设置
![](/icons/6052dou.gif)
它们不应该大于这个参数
![](/icons/6052de.gif)
设置
![](/icons/6052dou2.gif)
MaxRequestsPerChild 30
使用子进程
![](/icons/6052de.gif)
方式提供服务
![](/icons/6052de.gif)
Web服务
![](/icons/6052dou.gif)
常用
![](/icons/6052de.gif)
方式是
![](/icons/6052yi.gif)
个子进程为
![](/icons/6052yi.gif)
次连接服务
![](/icons/6052dou.gif)
这样造成
![](/icons/6052de.gif)
问题就是每次连接都需要生成、退出子进程
![](/icons/6052de.gif)
系统操作
![](/icons/6052dou.gif)
使得这些额外
![](/icons/6052de.gif)
处理过程占据了计算机
![](/icons/6052de.gif)
大量处理能力
![](/icons/6052dou2.gif)
因此最好
![](/icons/6052de.gif)
方式是
![](/icons/6052yi.gif)
个子进程可以为多次连接请求服务
![](/icons/6052dou.gif)
这样就不需要这些生成、退出进程
![](/icons/6052de.gif)
系统消耗
![](/icons/6052dou.gif)
Apache就采用了这样
![](/icons/6052de.gif)
方式
![](/icons/6052dou.gif)
![](/icons/6052yi.gif)
次连接结束后
![](/icons/6052dou.gif)
子进程并不退出
![](/icons/6052dou.gif)
而是停留在系统中等待下
![](/icons/6052yi.gif)
次服务请求
![](/icons/6052dou.gif)
这样就极大
![](/icons/6052de.gif)
提高了性能
![](/icons/6052dou2.gif)
但由于在处理过程中子进程要不断
![](/icons/6052de.gif)
申请和释放内存
![](/icons/6052dou.gif)
次数多了就会造成
![](/icons/6052yi.gif)
些内存垃圾
![](/icons/6052dou.gif)
就会影响系统
![](/icons/6052de.gif)
稳定性
![](/icons/6052dou.gif)
并且影响系统资源
![](/icons/6052de.gif)
有效利用
![](/icons/6052dou2.gif)
因此在
![](/icons/6052yi.gif)
个副本处理过
![](/icons/6052yi.gif)
定次数
![](/icons/6052de.gif)
请求的后
![](/icons/6052dou.gif)
就可以让这个子进程副本退出
![](/icons/6052dou.gif)
再从原始
![](/icons/6052de.gif)
htt pd进程中重新复制
![](/icons/6052yi.gif)
个干净
![](/icons/6052de.gif)
副本
![](/icons/6052dou.gif)
这样就能提高系统
![](/icons/6052de.gif)
稳定性
![](/icons/6052dou2.gif)
这样
![](/icons/6052dou.gif)
每个子进程处理服务请求次数由MaxRe questPerChild定义
![](/icons/6052dou2.gif)
缺省
![](/icons/6052de.gif)
设置值为30
![](/icons/6052dou.gif)
这个值对于具备高稳定性特点
![](/icons/6052de.gif)
FreeBSD系统来讲是过于保守
![](/icons/6052de.gif)
设置
![](/icons/6052dou.gif)
可以设置为1000甚至更高
![](/icons/6052dou.gif)
设置为0支持每个副本进行无限次
![](/icons/6052de.gif)
服务处理
![](/icons/6052dou2.gif)
#Listen 3000
#Listen 12.34.56.78:80
#BindAddress *
Listen参数可以指定服务器除了监视标准
![](/icons/6052de.gif)
80端口的外
![](/icons/6052dou.gif)
还监视其他端口
![](/icons/6052de.gif)
HTTP请求
![](/icons/6052dou2.gif)
由于FreeBSD系统可以同时拥有多个IP地址
![](/icons/6052dou.gif)
因此也可以指定服务器只听取对某个BindAddress< /B>
![](/icons/6052de.gif)
IP地址
![](/icons/6052de.gif)
HTTP请求
![](/icons/6052dou2.gif)
如果没有配置这
![](/icons/6052yi.gif)
项
![](/icons/6052dou.gif)
则服务器会回应对所有IP
![](/icons/6052de.gif)
请求
![](/icons/6052dou2.gif)
即使使用了BindAddress参数
![](/icons/6052dou.gif)
使得服务器只回应对
![](/icons/6052yi.gif)
个IP地址
![](/icons/6052de.gif)
请求
![](/icons/6052dou.gif)
但是通过使用扩展
![](/icons/6052de.gif)
Listen参数
![](/icons/6052dou.gif)
仍然可以让HTTP守护进程回应对其他IP地址
![](/icons/6052de.gif)
请求
![](/icons/6052dou2.gif)
此时Listen参数
![](/icons/6052de.gif)
使用方法和上面
![](/icons/6052de.gif)
第 2个例子相同
![](/icons/6052dou2.gif)
这种比较复杂
![](/icons/6052de.gif)
使用方法主要用于设置虚拟主机
![](/icons/6052dou2.gif)
此后可以用VirtualHost参数定义对区别IP
![](/icons/6052de.gif)
虚拟主机
![](/icons/6052dou.gif)
然而这种使用方法是较早
![](/icons/6052de.gif)
HTTP 1.0标准中设置虚拟主机
![](/icons/6052de.gif)
思路方法
![](/icons/6052dou.gif)
每针对
![](/icons/6052yi.gif)
个虚拟主机就需要
![](/icons/6052yi.gif)
个IP地址
![](/icons/6052dou.gif)
实际上用处并不大
![](/icons/6052dou2.gif)
在HTTP 1.1中
![](/icons/6052dou.gif)
增加了对单IP地址多域名
![](/icons/6052de.gif)
虚拟主机
![](/icons/6052de.gif)
支持
![](/icons/6052dou.gif)
使得虚拟主机
![](/icons/6052de.gif)
设置具备更大
![](/icons/6052de.gif)
意义
![](/icons/6052dou2.gif)
LoadModule mime_magic_module libexec/apache/mod_mime_magic.so
LoadModule info_module libexec/apache/mod_info.so
LoadModule speling_module libexec/apache/mod_speling.so
LoadModule proxy_module libexec/apache/libproxy.so
LoadModule rewrite_module libexec/apache/mod_rewrite.so
LoadModule anon_auth_module libexec/apache/mod_auth_anon.so
LoadModule db_auth_module libexec/apache/mod_auth_db.so
LoadModule digest_module libexec/apache/mod_digest.so
LoadModule cern_meta_module libexec/apache/mod_cern_meta.so
LoadModule expires_module libexec/apache/mod_expires.so
LoadModule headers_module libexec/apache/mod_headers.so
LoadModule usertrack_module libexec/apache/mod_usertrack.so
LoadModule unique_id_module libexec/apache/mod_unique_id.so
ClearModuleList
AddModule mod_env.c
AddModule mod_log_config.c
AddModule mod_mime_magic.c
AddModule mod_mime.c
AddModule mod_negotiation.c
AddModule mod_status.c
AddModule mod_info.c
AddModule mod_
.c
AddModule mod_autoindex.c
AddModule mod_dir.c
AddModule mod_cgi.c
AddModule mod_asis.c
AddModule mod_imap.c
AddModule mod_actions.c
AddModule mod_speling.c
AddModule mod_userdir.c
AddModule mod_proxy.c
AddModule mod_alias.c
AddModule mod_rewrite.c
AddModule mod_access.c
AddModule mod_auth.c
AddModule mod_auth_anon.c
AddModule mod_auth_db.c
AddModule mod_digest.c
AddModule mod_cern_meta.c
AddModule mod_expires.c
AddModule mod_headers.c
AddModule mod_usertrack.c
AddModule mod_unique_id.c
AddModule mod_so.c
AddModule mod_
env
.c
Apache服务器
![](/icons/6052de.gif)
![](/icons/6052yi.gif)
个重要特性就是其模块化
![](/icons/6052de.gif)
结构
![](/icons/6052dou.gif)
这不但表现为其能在编译时能通过新
![](/icons/6052de.gif)
模块加入新
![](/icons/6052de.gif)
功能
![](/icons/6052dou.gif)
还表现为其模块可以动态加载入http服务
![](/icons/6052chengxu.gif)
中
![](/icons/6052dou.gif)
而不必载入不需要
![](/icons/6052de.gif)
模块
![](/icons/6052dou2.gif)
使用Apache
![](/icons/6052de.gif)
动态加载模块只需要设置好LoadModule和AddModule参数就可以了
![](/icons/6052dou.gif)
这种特性就是Apache
![](/icons/6052de.gif)
DSO(Dynamic Shared Object)特性
![](/icons/6052dou.gif)
然而要想充分使用DSO特性仍然不是
![](/icons/6052yi.gif)
个简单
![](/icons/6052de.gif)
事情
![](/icons/6052dou.gif)
不适当
![](/icons/6052de.gif)
改动这里
![](/icons/6052de.gif)
设置就可能造成服务器不能正常启动
![](/icons/6052dou2.gif)
因此如果不是要增加或减少服务器提供
![](/icons/6052de.gif)
功能
![](/icons/6052dou.gif)
就不要改动这里
![](/icons/6052de.gif)
设置
![](/icons/6052dou2.gif)
上面这些列表就显示了FreeBSD下
![](/icons/6052de.gif)
缺省Apache服务器支持
![](/icons/6052de.gif)
模块
![](/icons/6052dou.gif)
事实上很多模块是没有必要
![](/icons/6052de.gif)
![](/icons/6052dou.gif)
不必要模块不会被载入内存
![](/icons/6052dou2.gif)
模块可以静态连接到Apache服务器内部
![](/icons/6052dou.gif)
也可以这样动态加载
![](/icons/6052dou.gif)
将Apache
![](/icons/6052de.gif)
特性都编译成动态可加载模块是该Port
![](/icons/6052de.gif)
做法
![](/icons/6052dou.gif)
而不是Apache
![](/icons/6052de.gif)
缺省做法
![](/icons/6052dou.gif)
这样就以牺牲很小
![](/icons/6052de.gif)
性能
![](/icons/6052de.gif)
同时
![](/icons/6052dou.gif)
带来极大
![](/icons/6052de.gif)
灵活性
![](/icons/6052dou2.gif)
因而动态可加载
![](/icons/6052de.gif)
能力还是对性能有轻微
![](/icons/6052de.gif)
影响
![](/icons/6052dou.gif)
因此可以重新编译Apache
![](/icons/6052dou.gif)
将自己所需要
![](/icons/6052de.gif)
功能编译进Apache 服务器内部
![](/icons/6052dou.gif)
可以让系统显得更为干净
![](/icons/6052dou.gif)
效率也有轻微
![](/icons/6052de.gif)
提高
![](/icons/6052dou2.gif)
通常仅仅为了这
![](/icons/6052yi.gif)
个目
![](/icons/6052de.gif)
就重新编译Apache是没有必要
![](/icons/6052de.gif)
![](/icons/6052dou.gif)
如果需要增加其他特性而重新编译Apache
![](/icons/6052dou.gif)
不妨在增加其他模块
![](/icons/6052de.gif)
同时将所有
![](/icons/6052de.gif)
模块都静态连接入Apache 服务器
![](/icons/6052dou2.gif)
有
![](/icons/6052de.gif)
使用者更喜欢动态加载模块
![](/icons/6052dou.gif)
那么也不妨全部都使用动态加载模块
![](/icons/6052dou2.gif)
这些模块都被Ports Collection放置到/usr/local/libexec/apache目录下
![](/icons/6052dou.gif)
每个模块对应Apache服务器
![](/icons/6052de.gif)
![](/icons/6052yi.gif)
个特性
![](/icons/6052dou2.gif)
详细解释每个模块
![](/icons/6052de.gif)
功能需要相当多
![](/icons/6052de.gif)
篇幅
![](/icons/6052dou.gif)
其中比较重要
![](/icons/6052de.gif)
特性将在后面相应
![](/icons/6052de.gif)
地方中进行解释
![](/icons/6052dou.gif)
而具体每个模块
![](/icons/6052de.gif)
功能及使用方法就需要查看Apache
![](/icons/6052de.gif)
文档
![](/icons/6052dou2.gif)
#ExtendedStatus On
Apache服务器可以通过特殊
![](/icons/6052de.gif)
HTTP请求
![](/icons/6052dou.gif)
来报告自身
![](/icons/6052de.gif)
运行状态
![](/icons/6052dou.gif)
打开这个ExtendedStatus 参数可以让服务器报告更全面
![](/icons/6052de.gif)
运行状态信息
![](/icons/6052dou2.gif)
Apache服务器需要各种设置
![](/icons/6052dou.gif)
以定义自己使用各种参数以提供Web服务
![](/icons/6052dou2.gif)
对于使用虚拟主机
![](/icons/6052de.gif)
情况
![](/icons/6052dou.gif)
除了在虚拟主机
![](/icons/6052de.gif)
定义项中覆盖
![](/icons/6052de.gif)
设置的外(有
![](/icons/6052de.gif)
设置必须重新定义)
![](/icons/6052dou.gif)
这里
![](/icons/6052de.gif)
设置也是虚拟主机
![](/icons/6052de.gif)
缺省设置
![](/icons/6052dou2.gif)
Port 80
Port定义了Standalone模式下httpd守护进程使用
![](/icons/6052de.gif)
端口
![](/icons/6052dou.gif)
标准端口是80
![](/icons/6052dou2.gif)
这个选项只对于以独立方式启动
![](/icons/6052de.gif)
服务器才有效
![](/icons/6052dou.gif)
对于以inetd方式启动
![](/icons/6052de.gif)
服务器则在inetd.conf中定义使用哪个端口
![](/icons/6052dou2.gif)
在Unix下使用80端口需要root权限
![](/icons/6052dou.gif)
![](/icons/6052yi.gif)
些管理员为了安全
![](/icons/6052de.gif)
原因
![](/icons/6052dou.gif)
认为httpd服务器不可能没有安全漏洞
![](/icons/6052dou.gif)
因而更愿意使用普通用户
![](/icons/6052de.gif)
权限来启动服务器
![](/icons/6052dou.gif)
这样就不能使用80端口及其他小于1024
![](/icons/6052de.gif)
端口
![](/icons/6052dou.gif)
而必须使用大于 1024
![](/icons/6052de.gif)
端口来启动httpd
![](/icons/6052dou.gif)
![](/icons/6052yi.gif)
般情况下8000或8080也是常用
![](/icons/6052de.gif)
端口
![](/icons/6052dou2.gif)
而Apache httpd服务器本身可以在以root权限打开80端口后再改变为普通用户身份进行运行
![](/icons/6052dou.gif)
这样就减少了危险性
![](/icons/6052dou.gif)
因而就不需要考虑这个安全问题
![](/icons/6052dou2.gif)
但是如果普通用户也想安装配置自己
![](/icons/6052de.gif)
WWW服务器
![](/icons/6052dou.gif)
那么就不得不使用大于1024
![](/icons/6052de.gif)
端口
![](/icons/6052dou.gif)
当然普通用户不能使用 Ports Collection进行编译安装
![](/icons/6052dou.gif)
而必须手工编译安装
![](/icons/6052dou2.gif)
User nobody
Group nogroup
User和Group配置是Apache
![](/icons/6052de.gif)
安全保证
![](/icons/6052dou.gif)
Apache在打开端口的后
![](/icons/6052dou.gif)
就将其本身设置为这两个选项设置
![](/icons/6052de.gif)
用户和组权限进行运行
![](/icons/6052dou.gif)
这样就降低了服务器
![](/icons/6052de.gif)
危险性
![](/icons/6052dou2.gif)
这个选项也只用于 Standalone模式
![](/icons/6052dou.gif)
inetd模式在inetd.conf中指定运行Apache
![](/icons/6052de.gif)
用户
![](/icons/6052dou2.gif)
由于服务器必须执行改变身份
![](/icons/6052de.gif)
![](/icons/6052set.gif)
uid
![](/icons/6052kh.gif)
操作
![](/icons/6052dou.gif)
因此
![](/icons/6052chushi.gif)
进程应该具备root权限
![](/icons/6052dou.gif)
如果是使用非root用户来启动Aapche
![](/icons/6052dou.gif)
这个配置就不会发挥作用
![](/icons/6052dou2.gif)
缺省设置为nobody和nogroup
![](/icons/6052dou.gif)
这个用户和组在系统中不拥有文件
![](/icons/6052dou.gif)
保证了服务器本身和由它启动
![](/icons/6052de.gif)
CGI 进程没有权限更改文件系统
![](/icons/6052dou2.gif)
在某些情况下
![](/icons/6052dou.gif)
例如为了运行CGI和Unix交互
![](/icons/6052dou.gif)
也需要让服务器来访问服务器上
![](/icons/6052de.gif)
文件
![](/icons/6052dou.gif)
如果仍然使用nobody和nogroup
![](/icons/6052dou.gif)
那么系统中将会出现属于nobody
![](/icons/6052de.gif)
文件
![](/icons/6052dou.gif)
这对于系统安全是不利
![](/icons/6052de.gif)
![](/icons/6052dou.gif)
![](/icons/6052yinwei.gif)
其他
![](/icons/6052chengxu.gif)
也会以nobody和nogroup
![](/icons/6052de.gif)
权限执行某些操作
![](/icons/6052dou.gif)
就有可能访问这些nobody拥有
![](/icons/6052de.gif)
文件
![](/icons/6052dou.gif)
造成安全问题
![](/icons/6052dou2.gif)
![](/icons/6052yi.gif)
般情况下要为Web服务设定
![](/icons/6052yi.gif)
个特定
![](/icons/6052de.gif)
用户和组
![](/icons/6052dou.gif)
同时在这里更改用户和组设置
![](/icons/6052dou2.gif)
ServerAdmin
[email protected]
配置文件中应该改变
![](/icons/6052de.gif)
也许只有ServerAdmin
![](/icons/6052dou.gif)
这
![](/icons/6052yi.gif)
项用于配置WWW服务器
![](/icons/6052de.gif)
管理员
![](/icons/6052de.gif)
email地址
![](/icons/6052dou.gif)
这将在HTTP服务出现
![](/icons/6052cuowu.gif)
![](/icons/6052de.gif)
条件下返回给浏览器
![](/icons/6052dou.gif)
以便让Web使用者和管理员联系
![](/icons/6052dou.gif)
报告
![](/icons/6052cuowu.gif)
![](/icons/6052dou2.gif)
习惯上使用服务器上
![](/icons/6052de.gif)
webmaster作为WWW服务器
![](/icons/6052de.gif)
管理员
![](/icons/6052dou.gif)
通过邮件服务器
![](/icons/6052de.gif)
别名机制
![](/icons/6052dou.gif)
将发送到webmaster
![](/icons/6052de.gif)
电子邮件发送给真正
![](/icons/6052de.gif)
Web管理员
![](/icons/6052dou2.gif)
#ServerName
![](/icons/6052new.gif)
.host.name
缺省情况下
![](/icons/6052dou.gif)
并不需要指定这个ServerName参数
![](/icons/6052dou.gif)
服务器将自动通过名字解析过程来获得自己
![](/icons/6052de.gif)
名字
![](/icons/6052dou.gif)
但如果服务器
![](/icons/6052de.gif)
名字解析有问题(通常为反向解析不正确)
![](/icons/6052dou.gif)
或者没有正式
![](/icons/6052de.gif)
DNS名字
![](/icons/6052dou.gif)
也可以在这里指定I P地址
![](/icons/6052dou2.gif)
当ServerName设置不正确
![](/icons/6052de.gif)
时候
![](/icons/6052dou.gif)
服务器不能正常启动
![](/icons/6052dou2.gif)
通常
![](/icons/6052yi.gif)
个Web服务器可以具有多个名字
![](/icons/6052dou.gif)
客户浏览器可以使用所有这些名字或IP地址来访问这台服务器
![](/icons/6052dou.gif)
但在没有定义虚拟主机
![](/icons/6052de.gif)
情况下
![](/icons/6052dou.gif)
服务器总是以自己
![](/icons/6052de.gif)
正式名字回应浏览器
![](/icons/6052dou2.gif)
ServerName就定义了Web服务器自己承认
![](/icons/6052de.gif)
正式名字
![](/icons/6052dou.gif)
例如
![](/icons/6052yi.gif)
台服务器名字(在DNS中定义了A类型)为freebsd.exmaple.org.cn
![](/icons/6052dou.gif)
同时为了方便记忆还定义了
![](/icons/6052yi.gif)
个别名(CNAME记录)为www.exmaple.org.cn
![](/icons/6052dou.gif)
那么Apache自动解析得到
![](/icons/6052de.gif)
名字就为freebsd.example.org.cn
![](/icons/6052dou.gif)
这样不管客户浏览器使用哪个名字发送请求
![](/icons/6052dou.gif)
服务器总是告诉客户
![](/icons/6052chengxu.gif)
自己为freebsd.example.org.cn
![](/icons/6052dou2.gif)
虽然这
![](/icons/6052yi.gif)
般并不会造成什么问题
![](/icons/6052dou.gif)
但是考虑到某
![](/icons/6052yi.gif)
天服务器可能迁移到其他计算机上
![](/icons/6052dou.gif)
而只想通过更改DNS中
![](/icons/6052de.gif)
www别名配置就完成迁移任务
![](/icons/6052dou.gif)
所以不想让客户在其书签中使用 freebsd记录下这个服务器
![](/icons/6052de.gif)
地址
![](/icons/6052dou.gif)
就必须使用ServerName来重新指定服务器
![](/icons/6052de.gif)
正式名字
![](/icons/6052dou2.gif)
DocumentRoot "/usr/local/www/data"
DocumentRoot定义这个服务器对外发布
![](/icons/6052de.gif)
超文本文档存放
![](/icons/6052de.gif)
路径
![](/icons/6052dou.gif)
客户
![](/icons/6052chengxu.gif)
请求
![](/icons/6052de.gif)
UR L就被映射为这个目录下
![](/icons/6052de.gif)
网页文件
![](/icons/6052dou2.gif)
这个目录下
![](/icons/6052de.gif)
子目录
![](/icons/6052dou.gif)
以及使用符号连接指出
![](/icons/6052de.gif)
文件和目录都能被浏览器访问
![](/icons/6052dou.gif)
只是要在URL上使用同样
![](/icons/6052de.gif)
相对目录名