httpd配置文件解析

 

     这里我用的是系统自带的RPM包安装的httpd-2.2.15版本的,最新版本配置可能会有所不同
1、模型:
    高度模块化:DSO
    MPM:Multipath Processing Module  //多处理模块
    prefork: 一次一个进程响应一个请求
    worker:一个进程生成多个线程,一个线程响应一个请求
    event:基于事件驱动,一个进程响应多个请求
2、安装
    这里就直接rpm包安装了,光盘上就有软件包
    yum install httpd
3、httpd安装完后的基本信息
    /etc/rc.d/init.d/httpd  //服务脚本
    /etc/httpd/    //运行目录
    /etc/httpd/conf    //配置文件
    /etc/httpd/conf/httpd.conf    //主配置文件
    /etc/httpd/conf.d/*.conf   //扩展配置
    DocumentRoot:/var/www/html   //站点根目录
    CGI:/var/www/cgi-bin/
    默认主页面文件:/var/www/html/index.html
4、主配置文件结构
    全局配置:对主服务器或虚拟主机都有效,且有些功能是服务器自身工作属性;
    主服务器配置:主站属性
    虚拟服务器:虚拟主机及属性定义
5、测试配置和查看的命令
    service httpd configtest //测试配置文件有没有语法错误
    httpd -t                 //同上
    httpd -l                 //当前服务器所使用的模型及开启模块
    httpd -D DUMP_MODULES    //当前服务器支持的模块
    service httpd reload     //重新加载配置文件
    service httpd restart    //重启httpd服务
    注意:修改配置文件后要重新加载配置文件,修改服务器监听端口后要重启服务
二、基本配置
    配置httpd的工作属性时,指令不区分大小写,但有约定俗成的习惯:单词的首字母大写,指令的值很有可能区分大小写,有些指令可以重复使用多次。
1、配置服务器支持keep-alived(持久连接)
    KeepAlive {On|Off}   //是否支持持久连接
    KeepAliveTimeout 2 //持久连接超时时间
    MaxKeepAliveRequests 50 //超时时间内允许请求的次数
2、配置所选用的MPM的属性,安装完默认使用prefork模型
    StartServers 8  //服务开启,默认启动的进程数
    MinSpareServers 5 //最小空闲进程数
    MaxSpareServers 20 //最大空闲进程数
    ServerLimit 256 //对于MaxClients而言允许开启最多的子进程数
    MaxClients 256 //每个进程最多用户链接数
    MaxRequestsPerChild 4000 //长连接时每个用户最多请求数
    worker模型:要支持worker模型需要配置/etc/sysconfig/httpd,开启以下行:
    StartServers 4 //服务开启,默认启动的进程数 
    MaxClients 300 //最多同时客户连接数
    MinSpareThreads 25 //最少空闲进程数
    MaxSpareThreads 75 //最好空闲进程数
    ThreadsPerChild 25 //每个进程开启的线程数
    MaxRequestsPerChild 0
3、配置监听的端口:
    Listen [IP:]PORT
    如:Listen 172.16.100.90:80
4、配置加载模块
    # LoadModule foo_module modules/mod_foo.so
    #
    LoadModule auth_basic_module modules/mod_auth_basic.so
    LoadModule auth_digest_module modules/mod_auth_digest.so
    LoadModule authn_file_module modules/mod_authn_file.so
    LoadModule authn_alias_module modules/mod_authn_alias.so
5、配置网站根目录
    DocumentRoot "/var/www/html" //指定网站的主目录
6、配置页面文件的访问属性
    Options
    Indexes    //当访问的路径下无默认的主页面时,将所有资源以列表的形式呈现给用户,慎用!建议关闭
    FollowSymLinks //是否跟随软连接文件
    SymLinksifOwnerMatch //跟随符号链接,只允许访问运行apache的用户有属主权限的文件
    ExecCGI: //是否允许执行CGI脚本;
    All
    None
7、基于客户端访问控制
    系统默认允许所有人访问
    Order //定义allow和deny那个为默认法则;写在后面的为默认法则:写在前面的指令没有显示定义的即受后面的指令控制:
    Order allow,deny
    Allow from all //允许所有人访问 
    如要配置允许172.16.0.0/16访问,但不允许172.16.100.89访问
    Order allow,deny
    Deny from 172.16.100.89 //禁用一个IP访问
    Allow from 172.16.0.0/16 //允许一个网段访问
8、userdir个人站点
    # UserDir is disabled by default since it can confirm the presence
     # of a username on the system (depending on home directory
    # permissions).
    #
    #UserDir disabled //注释此项
    # 
    # To enable requests to /~user/ to serve the user's public_html
    # directory, remove the "UserDir disabled" line above, and uncomment
    # the following line instead:
    #
9、定义默认主页
    DirectoryIndex index.php index.jsp index.html
10、配置日志功能
    日志有两类:访问日志(格式自定义)、错误日志
    错误日志:
    ErrorLog "/path/to/error_log_file"
    错误日志级别debug:任意详细信息被记录,info:常见信息,notice:需要引起注意的信息,
    warn:警告信息,error:错误信息,crit:蓝色信息,alert:橙色信息,emery:红色信息。
    访问日志:
    CustomLog "/path/to/custom_log_file" logformat
    日志格式:{combined|common|agent}
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    LogFormat "%{Referer}i -> %U" referer
    LogFormat "%{User-agent}i" agent
    %h //主机名
    %l //远程登陆名,通常为-
    %u //用户名
    %t //请求到达的时间
    %r //请求报文的起始行,方法
    %s //响应状态
    %b //响应报文的大小
    %{HEADER_NAME}i //记录指定首部对应的值
    %{User-Agent}i #用户代理
11、支持的字符集
    AddDefaultCharset UTF-8
12、路径别名,可以隐藏网站的真实目录,
    Alias /test/ "/www/test/" #配置别名
    可以给别名目录定义访问权限
    Options None
    AllowOverride None
    Order allow,deny
    Allow from 172.16.0.0/16
13、脚本路径别名
    调用服务器上的脚本程序,但不希望脚本放在网站的目录下
    ScriptAlias /cgi-bin/ "/www/cgi-bin/" //定义cgi脚本路径别名
    # vi /wwww/cgi-bin/test.sh //写一个测试脚本
    #!/bin/bash
    #cat << EOF
    Content-Type:text/html
    The hostname is: `hostname`. //输出当前系统的主机名。
    EOF
    测试:显示的是脚本执行后的结果
14、基于用户访问控制
    当你的网站或者站点的某个路径只想让你授权的用户访问时,就可以使用基于用户的访问控制
    这里使用htpasswd命令建立用户帐号文件
    htpasswd
    -c //第一次使用-c创建新文件,不是第一次不需要使用此选项
    -m //用户密码使用MD5加密后存放 
    -s //用户密码使用SHA加密后存放
    -p //用户密码不加密
    -d //禁用一个账户
    -e //启用一个账户
例如:
    # htpasswd -c -m /etc/httpd/conf/.htpass tom
    命令 选项 生成的用户文件路径及文件名 用户名
    # htpasswd -m /etc/httpd/conf/.htpass jerry
    # 再次添加用户时就不要使用-c选项了,否则会覆盖之前内容先生成
1)建立用户帐号文件
    # htpasswd -c -m /etc/httpd/conf/.htpass tom
2)修改主配置文件
    # vi /etc/httpd/conf/httpd.conf
    DocumentRoot "/www/html"             //此时网站根目录就是/www/html
    Optins Indexes
    AllowOverride AuthConfig
    AuthName "Oaly for employees."       //登录提示信息,可自定义
    AuthType Basic                       //认证方式
    AuthUserFile /etc/httpd/conf/.htpass //用户帐号文件
    Require valid-user                   //允许的用户
    Require 指定可以访问的用户,可以指定单个用户,直接写用户名就可以了,
    用户名可以写多个用空格分开,也可以指定所有用户就用 valid-user
15、配置虚拟主机
1)注释主服务器,添加虚拟主机
    # DocumentRoot "/www/html" //注释主服务器 
    NameVirtualHost 172.16.100.90:80 #开启虚拟主机
    DocumentRoot /www/web1 //虚拟主机的网站根目录
    ServerName web1.changyu.com //主机名
    DocumentRoot /www/web2
    ServerName web2.changyu.com
2)给虚拟主机提供测试文件
    mkdir /www/web{1,2}
    echo 'web1.changyu.com'  > /www/web1/index.html
    echo 'web2.changyu.com'  > /www/web2/index.html
3)配置完后用 httpd -t 测试配置文件有没有错误
4)重启服务 service httpd restart