笔记: Apache2.0参考手册

来源:百度文库 编辑:神马文学网 时间:2024/04/19 09:57:43
阅读Apache2。0参考手册
第九章:
1,配置文件为httpd.conf,也可能为别的名,通过 -f 规则配置文件,或者规定目录代替多个配置文件,此时要注意该目录下没有不是配置文件的文件
配置文件由指令和参数构成,次序不重要,也由依赖的,指令过长,用 \, 但 \ 后面不能有任何内容。指令有作用域
要能阅读指令文档,一条指令的文档中包括语法,上下文(context),状态(是指和apache绑定的程度),所在模块名,另外,deprecated(丢弃)
2,apache定位文件时依赖于文件系统;DocumentRoot,文档树的根,最好将其改为ServerRoot以外的目录;
首先配置文件系统的根,使用 容器完成,<>是指令块,注意目录设置的继承性,所以在设置文件系统根时要保守;之后配置文档树根了
Options指令9个选项,Indexes(使用索引页?),FollowSymLinks(使用符号连接,改善性能),SymLinksIfOwnerMatch(要Owner匹配才能使用符号链接),
MultiView(服务器可以和客户浏览器协商页面,比如页面的语言版本),ExecCGI(服务器可以在此目录中执行CGI脚本),Includes(可以包含SSI标签解释文件)
IncludesNoExec(对要运行外部程序的标签不会承兑),None,All,好理解;Options中可以使用+,-,等
注意指令的区别,作用相似,Directory应该总用于磁盘上的目录,Files用于单独的文件,
Location应该只能够用于没有相应目录和文件的请求,比如建立URI,以映射指定的模块;
另外三条指令有对于的Match指令(或者在后面有~),参数中使用正则表达式
基本的配置:
Timeout超时,注意衡量自己的网络
Keeplive,KeepAliveRequests(一个连接上有多少请求),KeepAliveTimeout(同一个连接中下一个请求的超时)
User,Group,谁在运行apache的子程序
MIME类型,注意mod_mime,mod_mime_magic模块的区别,可以告诉浏览器为正在下载的文件运行哪个程序
通过两种方法控制服务器返回的MIME类型,TypesConfig使用外部文件,AddType直接设置,建议用后者;
还有表述打包(内容编码:Content-Encoding),打包可以让文件在发送前压缩,加密;还表述使用哪种语言和哪个字符集,由mod_negotiation选项发送哪个版本的文件
3,HTTP请求和响应
手工模拟http请求,在我mylinux机器上做试验
telnet 127.0.0.1 80
GET /index/index.php
注意:以空格行结束请求
GET /index/index.html.zh-cn.gb2312 HTTP/1.1
后面没有HTTP版本信息的是HTTP0.9的,只返回页面,没有HTTP头,请求时,还可以指定其他参数,比如
GET /index/index.html.zh-cn.gb2312 HTTP/1.1
Host: localhost
服务器返回,有http头,
4,错误状态
五个基本类别:信息型,成功,重定向,客户错误,服务器错误,以状态码的第一位编号表示:1xx-5xx
定制错误页面,只有4xx和5xx的页面能被替换,使用ErrorDocument配置指令,两个参数:错误代码,替换页面
第十章
1,AAA模块
分清楚三A的区别,A(认证Authentication)A(授权Authorization)A(帐户确认Accounting)的区别
1.1认证:
有五个模块,一类基本的,一类摘要认证的,两条指令,AuthType指定类别:Basic基本,Digest摘要认证,AuthName认证领域,在认证框上提示用户的
基本认证:
当浏览器访问基本认证保护的URL时,服务器先返回401非授权代码,同时在响应中增加一个头文件-WWW认证,此头文件拥有两个关联值,如:
WWW-Authenticate: Basic realm="Server Infromaion"  ,客户收到后,询问名称口令,再次请求,这次的请求头包含认证头,头中包含认证类型,名称,口
网络上传输的用户名和口令,先有浏览器合并用户名和口令,用冒号分隔的单独字符串,再使用base64算法编码,注意,这是很容易反转得出原始口令的
摘要认证:
现在不是所以浏览器都支持,优点是不传输明文口令。区别在于上面服务器返回的头中WWW认证的不同,如下:
WWW-Authenticate: Digest realm="Server Information",nonce="FikdfiefFkejj-dfdfkfkkf",algorithm=MD5,domain="/",qop="auth"
其中 nonce当前值是跟随相应401代码随即生成的唯一值,是摘要认证的关键,algorithm默认MD5算法,domain标识使用相同认证信息的域范围,qop确定保护的质量,目前apache还只支持auth
客户浏览器进行下一此请求:
Authorization: Digest username="rbb",realm="Server Infromaion",nonce="FikdfiefFkejj-dfdfkfkkf",uri="/server-info",qop="auth",nc=00000001,cnonce="0dfdfdjl",response="fdjfkjkjiefje2343"
其中,username,realm,好理解,nonce要和服务器给的一样,nc值是当前值使用次数的计数器,cnonce是客户生成的唯一字符串,可以让用户参与认证控制,
response里是存储口令的地方,包含用户名,口令,URI,当前值,cnonce,计数器等等,通过了指定算法编码,服务器不能反转,只能重构后也通过算法编码,再校验,是否匹配
基本认证:
匿名认证,通过mod_auth_anon实现类似ftp站点的验证方式
基于文件的认证,有三个模块实现
mod_auth:指令是AuthUserFile,AuthGroupFile,用户文件类似/etc/passwd,必须使用htpasswd程序添加用户和口令;组文件格式是组名后跟空格分开的用户名 , webdev:rbb zKll kfff
基于数据库的认证,两个模块:mod_auth_db,mod_auth_dbm,用户和组信息存在DB或DBM数据库中,指令有AuthDBUserFile,AuthDBMUserFile,AuthDBGroupFile,AuthDBMGroupFile
通过htdbm(替代dbmmanage)管理数据库中的信息;后面的AuthAuthorizative指令可以让多个认证模块工作,默认为on,只有第一个受到调用的模块可以认证客户
摘要认证:
两个模块:Mod_digest,mod_auth_digest,apache2中已经取消了前者;指令有AuthDigestFile,AuthDigestGroupFile,
groupfile通基本认证的相同,AuthDigestFile则不同,使用的程序也不同,利用htdigest程序生成:htdigest [-c] passwdfile realm username ,要指定realm
AuthDigestDomain指令定义共享相同认证信息的域,参数是空格分开的URI列表;AuthDigestNonceLifetime,nonce当前值的有效时间
1.2授权
唯一指令Require,由核心实现的,定义可以访问指定页面的用户集合,3个参数:user(用户空格分开) group valid-user(配置的口令文件中的任何用户都可以)
1.3访问控制,access control
一个标准模块,3个指令:Allow Deny Order;Allow|Deny from condition,条件有:all,域名称,ip地址,网络/网络掩码,env=环境变量
Order指令Allow和Deny的顺序
1.4 综合认证授权和访问控制
要确保所以以/开始的URI受到保护,要用 指令,用DocumentRoot只保护文档树中的页面
Satisfy指令,当一个资源同时受到认证和访问控制指令限制时起作用,两个参数Any,All,Any只要通过一个,All两个都要通过
另外注意存储口令信息的位置问题
第二十章 日志
“日志就是金钱”
有三个日志,Cookie和传输日志,和最主要的访问日志
注意服务器记录日志要花费时间,进行日志信息越多,时间越长
1,LogFormat和CustomLog指令
LogFormat指令可以接受一个单独参数和两参数,第二个参数是别名,可以重用,查表得知参数的格式说明
CustomLog定义日志文件,两个参数,要写入的文件名称和格式别名,第一个参数如果是相对路径,则是相对于ServerRoot
重点:条件日志
使用CustomLog的第三个参数,规定环境变量,先使用SetEnvIf指令设置环境变量,SetEnvIf指令由mod_setenvif模块提供
这里的环境变量不要和操作系统的混淆了,仅仅用于apache服务器,可以用来控制条件日志和访问控制列表
SetEnvIf指令的格式:SetEnvIf attribute regex [!]env-variable[=value] [[!]env-variable[=value]] ...
attrbute是一下三种类别(第三个不说了)之一:一个HTTP请求头域(参见RFC2616);例如:Host, User-Agent, Referer, Accept-Language 。可以用一个正则表达式来进行匹配。
下列请求属性之一:
* Remote_Host 远程主机名(若可用)
* Remote_Addr 远程主机IP地址
* Server_Addr 接收到请求的服务器IP地址(2.0.43及以后版本)
* Request_Method 所用的请求方法(GET, POST等等)
* Request_Protocol 请求所使用的协议及其版本("HTTP/0.9", "HTTP/1.0", "HTTP/1.1"等)
* Request_URI 在HTTP请求行中请求的资源(通常是URL中去除协议、主机以及查询字符串后剩余的部分)。
第二个参数regex是一个Perl兼容的正则表达式。如果regex是根据attribute进行匹配的,那么剩余的参数将被评估。剩余的参数给出了需要设置的变量名及其可选的值
我的问题:分开记录访问/drupal 和 /wiki的日志
SetEnvIf Request_URI "\/drupal\/" site_drupal
SetEnvIf Request_URI "\/wiki\/" site_wiki
CustomLog /var/log/apache/access_log_drupal combined env=site_drupal
CustomLog /var/log/apache/access_log_wiki combined env=site_wiki
如此,访问http://ip/drupal/.....的就要记录到access_log_drupal
2,管道化日志
网上问题:如何将www.domain.com/drupal/目录转到另外一台服务器上?
我的答案:在drupal下只留一个index.html,内容如下:





url修改成另外服务器的地址,测试通过!
或者用Redirect
Redirect permanent /image http://www.newdomain.com
再就是mod_rewrite了,学习中
可信管道化日志,当服务器第一启动时,启动外部程序-日志处理器,子进程的日志都写入日志处理器,中间日志处理器终止了由apache父进程重启,注意,日志处理器会作为超级用户运行
CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access.log 86400" common    指令规定管道化日志,第一字符”|“,rotatelogs是日志滚动程序,后面是该程序的参数
当然还可以链接多个日志处理器,如下:
CustomLog "|logresolve|split_logs -f /var/log/" common    其中,logresolve会先将日志中的ip地址转化为主机名,再法往split
日志滚动:
利用apache发行版提供的rotatelogs,接受3个参数,1为日志文件名,2为运行间隔秒数,一天是86400,3为本地时区相对UTC的偏移
第二十一章 磁盘管理
日志文件:
注意存储日志文件的目录的许可权,不要其他用户能接触日志
建议将日志存在跟web文件不同的磁盘上,因为要尽可能快的存储日志,或者日志和站点文件分隔到两个不同的磁盘驱动控制器上,另外注意日志文件的大小
计算机管理员和Web站点拥有者应该不同,
第十五章 虚拟主机
基于IP的虚拟主机,一台机有多个ip地址,或相同ip地址上使用多个端口,收到连接时,根据地址和端口组合来应答
基于名称的虚拟主机,根据客户请求的头信息判定主机名,但是HTTP1。1才有主机头的
配置:
Listen ip_addr:port
Listen [ipv6_addr]:prot
指令 ,唯一参数就是虚拟主机引用的ip地址和端口组合,可以用*替代,组合必须在前面指定过
可以在VirturalHost容器中使用指令,DocumentRoot,ServerName,
其中ServerName可以让接受一个服务器名称和端口组合,这样可以让多个计算机报告他们是代理服务器,做到信息隐蔽
基于ip的虚拟主机可以用 _default_ 参数,可以使用所以没有在另外虚拟主机中规定的ip地址
基于名称的虚拟主机的配置:
NameVirtualHost指令第一参数接受ip端口组合,中跟随ip端口组合,然后在容器里面一定要配置ServerName,Apache就能根据主机头和配置的虚拟主机名提供请求
当一个ip组合有多多个名称时,容器里面使用ServerAlias指令;客户没有发送主机头,使用配置文件中的第一个虚拟主机;还可以在容器中使用ServerPath指令,定义一条路径,当没有发送主机头时,路径符号,就由该主机提供服务
配置同时两种主机
检查用户的虚拟主机配置:apache -t -DDUMP_VHOSTS, 我系统上httpd
3,保持站点分离
各个虚拟主机分离日志,在虚拟主机容器中设置CustomLog指令就可以,但注意可能会用完文件描述符
另外的方法使用管道化日志,或完全的后处理程序
独立进程MPM:
NumServers 5    服务器能开的总共子进程数目
ChildPerUserID 500 500 2   (确定共享单独用户和组的组合的子进程数目,用户主服务器配置中)
AssingUserID 500 500     (仅用于容器中的指令,规定使用本虚拟机的用户和组)
其他子进程使用主服务器的User和Group运行,注意NumServer中多余的子进程可能不能运行任何虚拟主机的问题
第十四章 站点内容增加后所做的工作
1,符号链接
哪个目录下打开了 Options FollowSymlinks选项,就不会去对经过的目录进行stat()查询,可以提高性能,但要注意安全
2,从URI空间映射文件
Alias /awstats /usr/local/awstats     好理解
AliasMatch 运行正则表达式匹配
Redirect permanent(temp,seeother) /test http://www.domain.com,   转向
RedirectTemp,RedirectPermanent,RedirectMatch
3,允许用户拥有自己的站点
UserDir disable  禁用所有yonghu
UserDir disable/enable [user list]
UserDir public_html      服务器收到 ~rbb  的请求时,会查看rbb的主目录下的public_html目录
UserDir /usr/web,       。。。。。。。。。。。。。。查看/usr/web/rbb
UserDir /usr/*/web       ......................... 查看/usr/rbb/web
4,使用mod_rewrite
太复杂了,不管是我的书还是2.2中文手册上都感觉太难了阅读Apache2。0参考手册
第九章:
1,配置文件为httpd.conf,也可能为别的名,通过 -f 规则配置文件,或者规定目录代替多个配置文件,此时要注意该目录下没有不是配置文件的文件
配置文件由指令和参数构成,次序不重要,也由依赖的,指令过长,用 \, 但 \ 后面不能有任何内容。指令有作用域
要能阅读指令文档,一条指令的文档中包括语法,上下文(context),状态(是指和apache绑定的程度),所在模块名,另外,deprecated(丢弃)
2,apache定位文件时依赖于文件系统;DocumentRoot,文档树的根,最好将其改为ServerRoot以外的目录;
首先配置文件系统的根,使用 容器完成,<>是指令块,注意目录设置的继承性,所以在设置文件系统根时要保守;之后配置文档树根了
Options指令9个选项,Indexes(使用索引页?),FollowSymLinks(使用符号连接,改善性能),SymLinksIfOwnerMatch(要Owner匹配才能使用符号链接),
MultiView(服务器可以和客户浏览器协商页面,比如页面的语言版本),ExecCGI(服务器可以在此目录中执行CGI脚本),Includes(可以包含SSI标签解释文件)
IncludesNoExec(对要运行外部程序的标签不会承兑),None,All,好理解;Options中可以使用+,-,等
注意指令的区别,作用相似,Directory应该总用于磁盘上的目录,Files用于单独的文件,
Location应该只能够用于没有相应目录和文件的请求,比如建立URI,以映射指定的模块;
另外三条指令有对于的Match指令(或者在后面有~),参数中使用正则表达式
基本的配置:
Timeout超时,注意衡量自己的网络
Keeplive,KeepAliveRequests(一个连接上有多少请求),KeepAliveTimeout(同一个连接中下一个请求的超时)
User,Group,谁在运行apache的子程序
MIME类型,注意mod_mime,mod_mime_magic模块的区别,可以告诉浏览器为正在下载的文件运行哪个程序
通过两种方法控制服务器返回的MIME类型,TypesConfig使用外部文件,AddType直接设置,建议用后者;
还有表述打包(内容编码:Content-Encoding),打包可以让文件在发送前压缩,加密;还表述使用哪种语言和哪个字符集,由mod_negotiation选项发送哪个版本的文件
3,HTTP请求和响应
手工模拟http请求,在我mylinux机器上做试验
telnet 127.0.0.1 80
GET /index/index.php
注意:以空格行结束请求
GET /index/index.html.zh-cn.gb2312 HTTP/1.1
后面没有HTTP版本信息的是HTTP0.9的,只返回页面,没有HTTP头,请求时,还可以指定其他参数,比如
GET /index/index.html.zh-cn.gb2312 HTTP/1.1
Host: localhost
服务器返回,有http头,
4,错误状态
五个基本类别:信息型,成功,重定向,客户错误,服务器错误,以状态码的第一位编号表示:1xx-5xx
定制错误页面,只有4xx和5xx的页面能被替换,使用ErrorDocument配置指令,两个参数:错误代码,替换页面
第十章
1,AAA模块
分清楚三A的区别,A(认证Authentication)A(授权Authorization)A(帐户确认Accounting)的区别
1.1认证:
有五个模块,一类基本的,一类摘要认证的,两条指令,AuthType指定类别:Basic基本,Digest摘要认证,AuthName认证领域,在认证框上提示用户的
基本认证:
当浏览器访问基本认证保护的URL时,服务器先返回401非授权代码,同时在响应中增加一个头文件-WWW认证,此头文件拥有两个关联值,如:
WWW-Authenticate: Basic realm="Server Infromaion"  ,客户收到后,询问名称口令,再次请求,这次的请求头包含认证头,头中包含认证类型,名称,口
网络上传输的用户名和口令,先有浏览器合并用户名和口令,用冒号分隔的单独字符串,再使用base64算法编码,注意,这是很容易反转得出原始口令的
摘要认证:
现在不是所以浏览器都支持,优点是不传输明文口令。区别在于上面服务器返回的头中WWW认证的不同,如下:
WWW-Authenticate: Digest realm="Server Information",nonce="FikdfiefFkejj-dfdfkfkkf",algorithm=MD5,domain="/",qop="auth"
其中 nonce当前值是跟随相应401代码随即生成的唯一值,是摘要认证的关键,algorithm默认MD5算法,domain标识使用相同认证信息的域范围,qop确定保护的质量,目前apache还只支持auth
客户浏览器进行下一此请求:
Authorization: Digest username="rbb",realm="Server Infromaion",nonce="FikdfiefFkejj-dfdfkfkkf",uri="/server-info",qop="auth",nc=00000001,cnonce="0dfdfdjl",response="fdjfkjkjiefje2343"
其中,username,realm,好理解,nonce要和服务器给的一样,nc值是当前值使用次数的计数器,cnonce是客户生成的唯一字符串,可以让用户参与认证控制,
response里是存储口令的地方,包含用户名,口令,URI,当前值,cnonce,计数器等等,通过了指定算法编码,服务器不能反转,只能重构后也通过算法编码,再校验,是否匹配
基本认证:
匿名认证,通过mod_auth_anon实现类似ftp站点的验证方式
基于文件的认证,有三个模块实现
mod_auth:指令是AuthUserFile,AuthGroupFile,用户文件类似/etc/passwd,必须使用htpasswd程序添加用户和口令;组文件格式是组名后跟空格分开的用户名 , webdev:rbb zKll kfff
基于数据库的认证,两个模块:mod_auth_db,mod_auth_dbm,用户和组信息存在DB或DBM数据库中,指令有AuthDBUserFile,AuthDBMUserFile,AuthDBGroupFile,AuthDBMGroupFile
通过htdbm(替代dbmmanage)管理数据库中的信息;后面的AuthAuthorizative指令可以让多个认证模块工作,默认为on,只有第一个受到调用的模块可以认证客户
摘要认证:
两个模块:Mod_digest,mod_auth_digest,apache2中已经取消了前者;指令有AuthDigestFile,AuthDigestGroupFile,
groupfile通基本认证的相同,AuthDigestFile则不同,使用的程序也不同,利用htdigest程序生成:htdigest [-c] passwdfile realm username ,要指定realm
AuthDigestDomain指令定义共享相同认证信息的域,参数是空格分开的URI列表;AuthDigestNonceLifetime,nonce当前值的有效时间
1.2授权
唯一指令Require,由核心实现的,定义可以访问指定页面的用户集合,3个参数:user(用户空格分开) group valid-user(配置的口令文件中的任何用户都可以)
1.3访问控制,access control
一个标准模块,3个指令:Allow Deny Order;Allow|Deny from condition,条件有:all,域名称,ip地址,网络/网络掩码,env=环境变量
Order指令Allow和Deny的顺序
1.4 综合认证授权和访问控制
要确保所以以/开始的URI受到保护,要用 指令,用DocumentRoot只保护文档树中的页面
Satisfy指令,当一个资源同时受到认证和访问控制指令限制时起作用,两个参数Any,All,Any只要通过一个,All两个都要通过
另外注意存储口令信息的位置问题
第二十章 日志
“日志就是金钱”
有三个日志,Cookie和传输日志,和最主要的访问日志
注意服务器记录日志要花费时间,进行日志信息越多,时间越长
1,LogFormat和CustomLog指令
LogFormat指令可以接受一个单独参数和两参数,第二个参数是别名,可以重用,查表得知参数的格式说明
CustomLog定义日志文件,两个参数,要写入的文件名称和格式别名,第一个参数如果是相对路径,则是相对于ServerRoot
重点:条件日志
使用CustomLog的第三个参数,规定环境变量,先使用SetEnvIf指令设置环境变量,SetEnvIf指令由mod_setenvif模块提供
这里的环境变量不要和操作系统的混淆了,仅仅用于apache服务器,可以用来控制条件日志和访问控制列表
SetEnvIf指令的格式:SetEnvIf attribute regex [!]env-variable[=value] [[!]env-variable[=value]] ...
attrbute是一下三种类别(第三个不说了)之一:一个HTTP请求头域(参见RFC2616);例如:Host, User-Agent, Referer, Accept-Language 。可以用一个正则表达式来进行匹配。
下列请求属性之一:
* Remote_Host 远程主机名(若可用)
* Remote_Addr 远程主机IP地址
* Server_Addr 接收到请求的服务器IP地址(2.0.43及以后版本)
* Request_Method 所用的请求方法(GET, POST等等)
* Request_Protocol 请求所使用的协议及其版本("HTTP/0.9", "HTTP/1.0", "HTTP/1.1"等)
* Request_URI 在HTTP请求行中请求的资源(通常是URL中去除协议、主机以及查询字符串后剩余的部分)。
第二个参数regex是一个Perl兼容的正则表达式。如果regex是根据attribute进行匹配的,那么剩余的参数将被评估。剩余的参数给出了需要设置的变量名及其可选的值
我的问题:分开记录访问/drupal 和 /wiki的日志
SetEnvIf Request_URI "\/drupal\/" site_drupal
SetEnvIf Request_URI "\/wiki\/" site_wiki
CustomLog /var/log/apache/access_log_drupal combined env=site_drupal
CustomLog /var/log/apache/access_log_wiki combined env=site_wiki
如此,访问http://ip/drupal/.....的就要记录到access_log_drupal
2,管道化日志
网上问题:如何将www.domain.com/drupal/目录转到另外一台服务器上?
我的答案:在drupal下只留一个index.html,内容如下:





url修改成另外服务器的地址,测试通过!
或者用Redirect
Redirect permanent /image http://www.newdomain.com
再就是mod_rewrite了,学习中
可信管道化日志,当服务器第一启动时,启动外部程序-日志处理器,子进程的日志都写入日志处理器,中间日志处理器终止了由apache父进程重启,注意,日志处理器会作为超级用户运行
CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access.log 86400" common    指令规定管道化日志,第一字符”|“,rotatelogs是日志滚动程序,后面是该程序的参数
当然还可以链接多个日志处理器,如下:
CustomLog "|logresolve|split_logs -f /var/log/" common    其中,logresolve会先将日志中的ip地址转化为主机名,再法往split
日志滚动:
利用apache发行版提供的rotatelogs,接受3个参数,1为日志文件名,2为运行间隔秒数,一天是86400,3为本地时区相对UTC的偏移
第二十一章 磁盘管理
日志文件:
注意存储日志文件的目录的许可权,不要其他用户能接触日志
建议将日志存在跟web文件不同的磁盘上,因为要尽可能快的存储日志,或者日志和站点文件分隔到两个不同的磁盘驱动控制器上,另外注意日志文件的大小
计算机管理员和Web站点拥有者应该不同,
第十五章 虚拟主机
基于IP的虚拟主机,一台机有多个ip地址,或相同ip地址上使用多个端口,收到连接时,根据地址和端口组合来应答
基于名称的虚拟主机,根据客户请求的头信息判定主机名,但是HTTP1。1才有主机头的
配置:
Listen ip_addr:port
Listen [ipv6_addr]:prot
指令 ,唯一参数就是虚拟主机引用的ip地址和端口组合,可以用*替代,组合必须在前面指定过
可以在VirturalHost容器中使用指令,DocumentRoot,ServerName,
其中ServerName可以让接受一个服务器名称和端口组合,这样可以让多个计算机报告他们是代理服务器,做到信息隐蔽
基于ip的虚拟主机可以用 _default_ 参数,可以使用所以没有在另外虚拟主机中规定的ip地址
基于名称的虚拟主机的配置:
NameVirtualHost指令第一参数接受ip端口组合,中跟随ip端口组合,然后在容器里面一定要配置ServerName,Apache就能根据主机头和配置的虚拟主机名提供请求
当一个ip组合有多多个名称时,容器里面使用ServerAlias指令;客户没有发送主机头,使用配置文件中的第一个虚拟主机;还可以在容器中使用ServerPath指令,定义一条路径,当没有发送主机头时,路径符号,就由该主机提供服务
配置同时两种主机
检查用户的虚拟主机配置:apache -t -DDUMP_VHOSTS, 我系统上httpd
3,保持站点分离
各个虚拟主机分离日志,在虚拟主机容器中设置CustomLog指令就可以,但注意可能会用完文件描述符
另外的方法使用管道化日志,或完全的后处理程序
独立进程MPM:
NumServers 5    服务器能开的总共子进程数目
ChildPerUserID 500 500 2   (确定共享单独用户和组的组合的子进程数目,用户主服务器配置中)
AssingUserID 500 500     (仅用于容器中的指令,规定使用本虚拟机的用户和组)
其他子进程使用主服务器的User和Group运行,注意NumServer中多余的子进程可能不能运行任何虚拟主机的问题
第十四章 站点内容增加后所做的工作
1,符号链接
哪个目录下打开了 Options FollowSymlinks选项,就不会去对经过的目录进行stat()查询,可以提高性能,但要注意安全
2,从URI空间映射文件
Alias /awstats /usr/local/awstats     好理解
AliasMatch 运行正则表达式匹配
Redirect permanent(temp,seeother) /test http://www.domain.com,   转向
RedirectTemp,RedirectPermanent,RedirectMatch
3,允许用户拥有自己的站点
UserDir disable  禁用所有yonghu
UserDir disable/enable [user list]
UserDir public_html      服务器收到 ~rbb  的请求时,会查看rbb的主目录下的public_html目录
UserDir /usr/web,       。。。。。。。。。。。。。。查看/usr/web/rbb
UserDir /usr/*/web       ......................... 查看/usr/rbb/web
4,使用mod_rewrite
太复杂了,不管是我的书还是2.2中文手册上都感觉太难了