AdministeringApache读书笔记

发表于:2007-07-04来源:作者:点击数: 标签:
modules -> Functions 安装与配置apache ########################################################################################### 获取apache 从http://www.apache.org 获取apache 2.0.44 安装apache ------------------------------ 使用APACI配置a

  modules -> Functions
  安装与配置apache
  ###########################################################################################
  获取apache
  
  从http://www.apache.org获取apache 2.0.44
  
  安装apache
  ------------------------------
  使用APACI配置apache的安装:
  ./configura
  常用选项:
  --help #可以查看所有的可用选项
  --prefix=<PATH> #指定安装目录
  --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
  aclearcase/" target="_blank" >ccess.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>

原文转自:http://www.ltesting.net