httpd配置文件详解
#vim /etc/etc/httpd/conf/httpd.conf
1、监听套接字
Listen [IP:]port
此指令可以出现多次, 用于指定监听多个不同的套接字:
Listen 80
Listen 172.16.100.7:8080

2、 配置使用keep alive(生存活跃时间)
KeepAlive {On|Off}
KeepAliveTimeout 2
MaxKeepAliveRequests 50

3、 MPM
<IfModule prefork.c>
StartServers: 默认启动的工作进程数;
MinSpareServers: 最少空闲进程数;
MaxSpareServers: 最大空闲进程数;
ServerLimit: 最大活动进程数;
MaxClients: 并发请求的最大数;
MaxRequestsPerChild: 每个子进程在生命周期内所能够服务的最多请求个数;

</IfModule>
<IfModule worker.c>
StartServers:启动的子进程的个数
MaxClients: 并发请求的最大数;
MinSpareThreads:最小空闲线程数;
MaxSpareThreads:最大空闲线程数;
ThreadsPerChild:每个子进程可生成的线程数;
MaxRequestsPerChild:每个子进程在生命周期内所能够服务的最多请求个数,0表示不限定;
</IfModule>

Apache 2.X 支持插入式并行处理模块,称为多路处理模块(MPM)。在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择,它们会影响到apache的速度和可伸缩性。
Prefork MPM : 这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工作方式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。
这个MPM具有很强的自我调节能力,只需要很少的配置指令调整。最重要的是将maxcleints设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。
Worker MPM : 此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是,它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。
每个进程可以拥有的线程数量是固定的。服务器会根据负载情况增加或减少进程数量。一个单独的控制进程(父进程)负责子进程的建立。每个子进程可以建立ThreadsPerChild数量的服务线程和一个监听线程,该监听线程监听接入请求并将其传递给服务线程处理和应答。
不管是Worker模式或是Prefork 模式,Apache总是试图保持一些备用的(spare)或者是空闲的子进程(空闲的服务线程池)用于迎接即将到来的请求。这样客户端就不需要在得到服务前等候子进程的产生。
Event MPM:以上两种稳定的MPM方式在非常繁忙的服务器应用下都有些不足。尽管HTTP的Keepalive方式能减少TCP连接数量和网络负载,但是 Keepalive需要和服务进程或者线程绑定,这就导致一个繁忙的服务器会耗光所有的线程。 Event MPM是解决这个问题的一种新模型,它把服务进程从连接中分离出来。在服务器处理速度很快,同时具有非常高的点击率时,可用的线程数量就是关键的资源限 制,此时Event MPM方式是最有效的。一个以Worker MPM方式工作的繁忙服务器能够承受每秒好几万次的访问量(例如在大型新闻服务站点的高峰时),而Event MPM可以用来处理更高负载。值得注意的是,Event MPM不能在安全HTTP(HTTPS)访问下工作。
对于Event 模式,apache给出了以下警告:
This MPM is experimental, so it may or may not work as expected .
这种MPM目前处于试验状态,他可能不能按照预期的那样工作。
4、DSO模块加载方式
LoadModule module_name /path/to/module
如果使用相对路径,则对于ServerRoot所定义的位置而言;例如:
LoadModule php5_module /usr/lib64/httpd/modules/php5.so
让服务重载配置文件方能生效;
httpd -M: 列出已经装载的所有DSO及非DSO模块
httpd -l: 列出支持使用的非DSO模块

5、 配置站点根补录

6 配置网页访问属性
<Direcotry "/path/to/somewhere">
Options:
Indexes: 缺少指定的默认页面时,允许将目录中的所有文件以列表形式返回给用户;危险;
FollowSymLinks: 允许跟随符号链接所指向的原始文件;
None: 所有都启用;
All: 所有都启用;
ExecCGI: 允许使用mod_cgi模块执行CGI脚本;
Includes: 允许使用mod_include模块实现服务器端包含(SSI);
MultiViews:允许使用mod_negotiation实现内容协商;
SymLinksIfOwnerMatch:在链接文件属主属组与原始文件的属主属组相同时,允许跟随符号链接所指向 的原始文件;
<Directory>

7、 基于主机的访问控制
<Direcotry "/path/to/somewhere">
Options
AllowOverride None
Order Deny,Allow
Allow
Deny
<Directory>
最佳匹配:从列表中找出最小的能匹配到访问者的地址的条目为最终生效的;
Allow from
Deny from
IP, Network Address
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0

8、 定义默认主页面
DirectoryIndex index.php index.html home.html default.html

9、用户目录
如果期望让每个用户都可以创建个人站点:http://Server_IP/~Username/
userdir disabled: 禁止
userdir public_html
public_html是用户家目录下的目录名称,所有位于此目录中的文件均可通过前述的访问路径进行访问
用户的家目录得赋予运行httpd进程的用户拥有执行权限;

10、配置日志功能
/var/log/httpd/
access.log: 访问日志,其需要记录的内容需要自定义
error.log: 错误日志
访问日志:
CustomLog "/path/to/access_log_file" Format_Name
LogFormat Format_String Format_Name
%h: 客户端地址
%l: 远程登录名,通常为-
%u: 认证时的远程用户名,没有认证时为-
%t: 收到请求时的时间;
%r: 请求报文的起始行;
%>s: 响应状态码;
%b: 响应报文的长度,单位为字节
%{Header_Name}i: 记录指定请求报文首部的内容(value);

11、 路径别名
Alias /alias/ "/path/to/somewhere"
意味着访问http://Server_IP/alias/时,其页面文件来自于/path/to/somewhere这个位置;

12、设置默认字符集
AddDefaultCharset

13、CGI脚本路径别名
CGI路径 /var/www/cgi-bin
URL --> FileSystem Directory
CGI: Common Gateway Interface协议
Content-Type: text/html 文本类型为text/html
14、 基于用户的访问控制
虚拟用户:
文件:/etc/httpd/conf/.htpasswd
认证类型(auth):
basic: 基本认证,帐号和密码明文发送;
digest:摘要认证,hash编程之后发送;
认证提供者(authentication provider):帐号和密码的存放位置
authn
授权机制(authorization):根据什么进行授权
15、虚拟主机
一个物理服务器提供多个站点; 使用虚拟主机得先取消中心主机
Web: Socket(IP, port)
基于不同的IP实现不同的虚拟主机
变化IP
基于不同的port实现不同的虚拟主机
变化port
基于不同的FQDN实现不同的虚拟主机
变化ServerName的值
NameVirtualHost *:80
<virtualhost IP:port>
ServerName
DocumentRoot ""
<Directory "">
Options
</Directory>
ServerAlias
ServerAdmin
</virtualhost>
虚拟主机的单独配置:
用户认证
访问日志
错误日志
别名
脚本别名
=======================未完==============================================
PS:后续还有