LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 7606|回复: 6

Administering Apache 读书笔记

[复制链接]
发表于 2003-5-22 12:11:29 | 显示全部楼层 |阅读模式
Administering Apache 读书笔记
nico chen
Homepage:http://www.wo-com.com
E-mail flashtor@sohu.com
apache系统管理指南        清华大学出版社
Administering Apache        美]Mark Arnold Jeff Aimeida
apache version 2.0.44
  这本书是一本不错的apache的专著,内容详略得当,从字里行间,可以看出作者
是非常非常聪明,他们懂得如何能让自己的工作更轻松些,例如将烦琐和重复的事情
化作脚本,以便重复使用,这个经验我在拜读《unix unleash》我就有所闻了。有经
验的网络管理员,对各种应用层次的策略都会照顾到,而Mark和Jeff也做到了这点。
总之,假如你对apache有点了解,而又想深入探索的话,这本书值得推荐。下面是我
的读书笔记的整理,我是按照自己的需要记录的,并不是原书的所有内容,以供大家
参考

modules -> Functions
安装与配置apache
###########################################################################################
获取apache

http://www.apache.org获取apache 2.0.44

安装apache
-------------------------------------------------------------------
使用APACI配置apache的安装:
./configura
常用选项:
--help                                        #可以查看所有的可用选项
--prefix=<ATH>                                #指定安装目录
--enable-module = <xxx|all|most>        #xxx为名字为mod_xxx.c的模块
--disable-module = xxx                        #xxx为名字为mod_xxx.c的模块
--enable-shared = <xxx|max>                #起用DSO(Dynamic Share Object),需要mod_so.c的支持

开始安装
-------------------------------------------------------------------
make
make install
oks

与php 4.3.1 的集成
-------------------------------------------------------------------
---/configure --with-apxs2=/usr/local/apache2/bin/apxs <假如想安装mysql的话 --with-mysql=/usr/local/mysql >
make
make install

配置apache
-------------------------------------------------------------------
apache的主要配置文件:
httpd.conf
srm.conf
access.conf
mime.types
magic

编辑httpd.conf
基本指令:
ServerType                #为standalone或者是inetd
ServerRoot                #apache的安装目录,默认为/usr/local/apache
LockFile                #服务器串行模式的加锁文件位置,一般不需要改动
PidFile                        #记录服务器运行时的pid的文件路径
ResourceConfig                #资源文件所在,让srm.conf为空,则httpd.conf的相关值生效
AccessConfig                #访问权限文件的所在路径
LoadModule                #加载模块       
AddModule                #加载模块的顺序
Port                        #监听端口,默认为80
ServerAdmin                #管理员信箱
ServerName                #服务器名称
DocumentRoot                #站点文件所在路径

测试配置是否正确
-------------------------------------------------------------------
apachectl configtest

启动apache
-------------------------------------------------------------------
apachectl start 或者 httpd -k start

重起apache
-------------------------------------------------------------------
apachectl graceful 或者 httpd -k graceful

停止apache
-------------------------------------------------------------------
apachectl stop 或者 httpd -k stop

创建web site
###########################################################################################

apache默认的用户和组为为apache
将站点的目录和文件的权限赋予apache
find /usr/local/apache/ -exec chown apache {}\
find /usr/local/apache/ chgrp apache {}\
find /usr/local/apache/ -type -d chmod 755 {}\
find /usr/local/apache/  -type -f chmod 640 {} \
给适当的文件适当的权限是一个管理员的责任所在。

内容处理
###########################################################################################

目录内容处理
-------------------------------------------------------------------
DirectoryIndex index.htm index.html                #默认文挡
当默认文档不存在,且<Directory>Options中Indexes生效时:
HeaderName                                        #页面题头文件
ReadmeName                                        #页面页尾文件
IndexIgnore                                        #隐藏文件规则
IndexOptions                                        #控制目录列表的外观

目录其他
-------------------------------------------------------------------
Alias /path/ "/<path>/"                        #别名定义

配置MIME(multipropuse internet mail extend protocol)
-------------------------------------------------------------------
因为不常会修改,只做浏览
AddHandler
SetHandler send-as-is                # 按原状发送

配置CGI(comment gateway interface)
-------------------------------------------------------------------

<Directory>Options +ExecCGI                #以允许使用CGI

SetHandler cgi-script                 #设定CGI脚本类型


配置SSI
-------------------------------------------------------------------
因为apache方面的性能专家Dean Gaudet不鼓励使用SSI,所以我只是浏览了一下,没有详细地记录下来

使用日志
###########################################################################################

-------------------------------------------------------------------
LogLevel <emerg|alert|crit|warn|notice|info|debug> 简略-->详细 严重-->轻微
ErrorLog <path|pipe|syslog>
日志发送到文件:ErrorLog /var/www/log
日志发送到syslog:ErrorLog syslog:local <1-7> 默认为local 7
日志发送给管道:ErrorLog "|/usr/local/apache/bin/errordb insert"

日志传输
-------------------------------------------------------------------
文档传送日志告诉你服务器在与谁交互,交互什么,是什么时候交互,同哪里交互
TransferLog用法类似ErrorLog

自定义日志格式
-------------------------------------------------------------------
LogFormat
%a                client ip
%A                server ip
%b                响应http标头以外的字节数
%{eviron}e        以eviron命名的变量的值
%f                被请求文件的路径
%h                client hostname
%{reqheader}i        名字为reheader的标头的值
%l                client的系统环境,IdentifyCheck为On且内容协商成功
%{modnote}n        名字为 modnote的短信的值
%p                server port
%P                server PID
%r                请求的第一行,包括URLmodth
%s                原始响应信息
%>s                返回浏览器的响应状态
%t                请求的发生时间[18/Nov?1999:13:02:58-0600]
%{timefmt}t        定义时间的显示格式,因为基本不需要修改,所以省略了...
%T                处理请求的秒数
%u                请求用户的登陆名
%U                被请求的URL,不包括参数
%v                server name
%V                根据UseCanonicalName得到服务器名称

通用日志的默认格式等价于
LogFormat "%h %l %u %t \" %r \" %>s %b"

LogFormat "%401u" #记录未认证的用户名

apache 预先定义了四种日志的格式:<combined|common|referer|agent>

CustomLog
-------------------------------------------------------------------

CoustomLog "/var/logs/httpd/access_logs" env = myCheck #否定为 env =! myCheck

SetEnvIf <Remote_Addr|Remote_host|Remote_user|Request_Method|Request_protocol|Request_URL> "condition" VarName

只要检查属性中符合Condition,就定义名字为VarName的变量

condition为unix中的正则表达式(Regular Expression),可以查看man regex获取详细资料

LogFormat CustomLog 由mod_log_config.c提供<默认>

SentEnvIf mod_setenvif.c提供<默认>

CookieTracking CookieName CookieExpires
-------------------------------------------------------------------
由mod_usertrack.c提供<非默认>
<IfModule mod_usertrack>
        CookieTracking <on|off>
        CookieName myCookie
</IfModule>
        CookieExpires 600         #也可以用 CookieExpires "3 weeks 2 days 4 hours 22 seconds"
注意CookieExpires不可以在<Directory>中,该选项为全局

AllowOverride
-------------------------------------------------------------------
All                允许.htaccess覆盖httpd.conf中的所有目录设置
Authconfig        允许覆盖认证指令AuthName AuthType AuthUserFile AuthGroupFile 等
FileInfo        允许覆盖目录存取文件设置AddEncodeing AddLanguage AddType CookieTracking CookieName等
Indexes                允许覆盖目录索引设置
Limit                允许覆盖allow deny order require
None                不允许覆盖httpd.conf中的所有目录设置
Options                允许覆盖Options的设置

例子:用户单击流事件,引用记录,代理记录

虚拟主机
###########################################################################################

基于IP的虚拟主机
-------------------------------------------------------------------
<VirtualHost 202.119.219.28>
        ServerName        www.njfu.edu.cn
        ServerAdmin        nico@njfu.edu.cn
        DocumentRoot        /var/www/
        ServerAlias njfu.edu.cn
</VirtualHost>

基于域名的虚拟主机
-------------------------------------------------------------------
NameVirtualHost 202.119.219.28
<VirtualHost 202.119.219.28>
        ServerName        www.njfu.edu.cn
        ServerAdmin        nico@njfu.edu.cn       
        DocumentRoot        /var/www/
        ServerAlias njfu.edu.cn        main.njfu.edu.cn
</VirtualHost>

VirtualDocumentRoot
-------------------------------------------------------------------
mod_vhost_alias.c模块提供
大大简化了配置虚拟主机

一个好的管理员会为没个虚拟站点分别设置不同的的按全性设置


安全性
###########################################################################################

IP构成
-------------------------------------------------------------------
首先拒绝一切,接着允许可以放行的服务
ICMP        (ping / pong)
DNS DHCP
WWW SMTP POP PROXY.i.e

网络配置文件
-------------------------------------------------------------------

/etc/sysconfig/network-script/ifcfg-eth0
------------------------------
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=131.107.200.1
NETMASK=255.255.0.0
GATEWAY=131.107.200.6

/etc/sysconfig/network
------------------------------
NETWORKING = YES
FORWARD_IPV4 = YES
HOSTNAME = NICOWARE
GATEWAYDEV = eth0

安全配置文件
-------------------------------------------------------------------
/etc/securetty
/etc/ftpuser
/etc/ssh
/etc/hosts.allow
/etc/hosts.deny                #详细可以查看man 5 host_access
防止root直接登陆是一个上策,便于发生恶性时间时的侦察

保护内容的安全性
-------------------------------------------------------------------
User        apache #运行的用户帐户
Group        apache #运行的用户帐户组

<Directory>
<Location>
<Files>

使用order,allow和deny总是并行处理的
<Directory>
Order allow,deny
        Deny from all
        Allow 192.168.0.1/255.255.255.0
</Directory>

身份验证
-------------------------------------------------------------------

AuthType <Basic|Digest>                                #验证方式
Basic验证方式是用BASE64编码,即是明文传输的


AuthName "nico's zone"                                #验证区域名称
AuthUserFile        /var/www/authenticaton/.htuser        #用户密码文件,使用htpasswd创建
AuthGroupFile        /var/www/authenticaton/.htuser        #用户组文件,需要手工创建
require < user| group | valid-user >                #需要满足的条件


mod_digest.c<非默认>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AuthDigestFile                                       


使用数据库文件保持用户帐号和密码
使用BSD DB2 格式,数据使用crypt()加密
dbmmanage可以创建BSD DB2 和DBM格式的数据库

mod_auth_db.c <非默认>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AuthDBUserFile                                       
AuthDBGroupFile                                       

mod_auth_anon.c <非默认>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Anonymous                                                #允许匿名登陆的用户名称
Anonymous_MustGiveEmail                <on/off>                #匿名用户必须提交E-MAIL
Anonymous_LogEmail                <on/off>                #记录E-mail到log中
Anonymous_VerifyEmail                <off/on>                #检查E-mail的有效性
Anonymous_NoUserId                <off/on>                #允许不用用户名登陆

mod_digest.c<非默认>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
因为觉得不常用所以没有记录

密码文件创建程序
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
htpasswd htdigest dbmmanage

Satisfy
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
对在封闭模块(如 <Directory>),中认证策略的满足条件
Satisfy <all|any>

<Limit> <LimitExcept>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<Limit> <LimitExcept>是逻辑上的对立
参数:CONNECT COPY DELETE GET(HEAD) OPTIONS LOCK MKCOL MOVE PATCH POST PROPFIND PROPPATCH PUT TRACE UNLOCK

SSL
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
因为感觉商业应用比较常用,我暂时很用不到,等以后要用的时候在看好了
                       

建立站点空间
###########################################################################################

决定规模                访问量,站点内容
决定提供的服务                 html cgi php perl
空间分配                设立quota
设置用户主目录                UserDir,用户帐户安全
与其他程序配合                DNS FTP SSH


故障处理
###########################################################################################

server-status
-------------------------------------------------------------------
由模块mod_status.c提供
报告服务器的状态可以用命令 apachectl status
但是server-status可以提供更多的信息
ExtendedStatus On
<Location /server-status>
SetHandLer server-status
Options None
AllowOverride None
Order allow,deny
        Deny from all
        Allow from 127.0.0.1
</Location>

server-info
-------------------------------------------------------------------
由模块mod_info.c提供
<Location /server-info>
SetHandLer server-info
Options None
AllowOverride None
Order allow,deny
        Deny from all
        Allow from 127.0.0.1
</Location>
发表于 2003-5-22 13:58:34 | 显示全部楼层
精华!
发表于 2003-6-11 19:03:08 | 显示全部楼层
好东西可以收藏。(我正需要这个东西)
发表于 2004-5-28 11:02:12 | 显示全部楼层
好,真的非常好
发表于 2005-10-27 15:18:26 | 显示全部楼层
谢谢
正在学
回复 支持 反对

使用道具 举报

发表于 2006-11-24 20:29:12 | 显示全部楼层
收藏!
就是学!
回复 支持 反对

使用道具 举报

发表于 2006-11-24 23:47:17 | 显示全部楼层
感谢,太好了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表