|
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> |
|