首页 > 代码库 > http的特性

http的特性

CentOS 6: httpd
        配置文件:
           

/etc/httpd/conf/httpd.conf 
            /etc/httpd/conf.d/*.conf

        服务脚本:
            /etc/rc.d/init.d/httpd
            脚本配置文件:/etc/sysconfig/httpd
        模块目录:
            /etc/httpd/modules: 链接文件
            /usr/lib64/httpd/modules   
        主程序:
           

 /usr/sbin/httpd: 
prefork 
            /usr/sbin/httpd.event: event 
            
/usr/sbin/httpd.worker: worker

        日志文件目录:
            /var/log/httpd
                access_log: 访问日志
                error_log: 错误日志
     

 

        httpd的配置文件说明:

           

          # grep "Section" httpd.conf
第一部分### Section 1: Global Environment             
第二部分### Section 2: ‘Main‘ server configuration             
第三部分### Section 3: Virtual Hosts

                主服务器和虚拟主机一般不同时使用;默认仅启用了主服务器;

            指令参数:不区分字符大小写,但其值有可能会区分大小写


      持久连接
            KeepAlive {On|Off}
            MaxKeepAliveRequests 100
            KeepAliveTimeout 15

        

           
       指定监听的地址和端口
            Listen [IP:]PORT

            此指令可重复指定多次;

        DSO机制装载的模块
            显示:
                # httpd -D DUMP_MODULES

            LoadModule Module_Name /path/to/Module_File   

        指定站点根目录
            DocumentRoot "/path/to/somewhere"

         站点路径访问控制
            基于本地文件系统路径:
                <Directory "/path/to/somewhere">

                </Directory>

            基于URL访问路径做访问控制
                <Location "/path/to/URL">
                </Location>   

         于Directory中可用的访问控制
            (1) Options
                Indexes: 当访问的路径下无默认的主页面,将所有资源以列表形式呈现给用户;危险,慎用;
                FollowSymlinks: 跳跃符号链接

            (2) AllowOverride
                支持在每个页面目录下创建.htaccess用于实现对此目录中资源访问时的访问控制功能。

         基于IP做访问控制
            Order allow,deny
            Deny from id
            Allow from id

                

        定义默认的主页面
            DirectoryIndex

        配置日志功能
            ErrorLog "/path/to/error_log"
            LogLevel {debug|info|notice|warn|error|crit|alert|emerg}

            LogFormat
            CustomLog "/path/to/access_log" LogFormat_Name

                %h: 客户端地址
                %l: 远程登录名,通常为-
                %u: 认证时输入用户名,没有认证时为-
                %t: 服务器收到 用户请求时的时间
                %r:请求报名的起始行
                %>s: 响应状态码
                %b: 响应报文的长度,单位是字节
                %{HEADER_NAME}i: 记录指定首部对应的值

        路径别名
            站点根目录:/www/html
               

            实现URL路径的映射,从而所访问的资源不再依赖于站点根目录;

                Alias /URL/ "/path/to/somewhere/"

        

    httpd配置(2)

    设定默认字符集
        ASCII

        字符集:GB2312, GB18030, GBK
            UTF

        AddDefaultCharset

    CGI脚本
        CGI脚本路径别名

        /var/www/cgi-bin/
            http://server/cgi-bin/

        bash写CGI脚本:
            所有文本都使用命令输出:echo, printf, cat
            执行程序:命令引用

            Content-Type: text/html
            <pre>

            </pre>

            FastCGI: 协议

    基于用户访问控制
        用户认证:
            基本认证: Basic
            摘要认证:digest

        虚拟用户:仅用于访问某服务或获取某资源的凭证;
            文本文件:.htpasswd
            SQL数据库
            dbm: 数据库引擎,提供API
            ldap:

        authentication provider: 账号和密码的存储机制;
            authn

        authorization provider: 授权

        案例:基于文件做访问控制

         基于用户进行认证

           

<Directory "/var/www/html/admin">                  
Options none                  
AllowOverride AuthConfig                  
AuthType Basic                  
AuthName "Admin Area."                  
#AuthBasicProvider file                  AuthUserFile 
/etc/httpd/conf/.htpasswd                  Require valid-user 
            </Directory>
                Require valid-user: 文件中所有用户均可访问                 Require 
user USERNAME, ...

         提供认证文件
            htpasswd
                -c: 如果此文件事先不存在,则创建;注意,只能在创建第一个用户时使用;
                -m:以md5的格式编码存储用户的密码信息
                -D:删除指定用户

         组认证
           

<Directory "/var/www/html/admin"> 
                 Options none 
                 AllowOverride AuthConfig 
                 AuthType Basic 
                 AuthName "Admin Area." 
                 #AuthBasicProvider file 
                 AuthUserFile 
/etc/httpd/conf/.htpasswd 
                 AuthGroupFile 
/etc/httpd/conf/.htgroup 
                 Require group GROUP_NAME 
            </Directory>

            组文件:
                组名:user1 user2 user3

    虚拟主机
        虚拟主机:使用不同访问路径
            基于端口
            基于IP
            基于主机名

         使用虚拟的前提:取消主服务器
            注释主服务器的站点根路径指定:DocumentRoot

        定义虚拟主机
            NameVirtualHost IP:PORT

            <VirtualHost IP:PORT>
                ServerName
                DocumentRoot
                ServerAlias
                ErrorLog
                CustomLog
            </VirtualHost>

        配置文件语法检查:
            httpd -t
            service httpd configtest

        https协议 

       
        ssl(安全的套接字层), tls(传输层安全)

        http协议:文本编码

            验正:使用telnet发请求

           

        httpd: ssl       
            ssl模块
                单独成包

        ssl会话基于IP地址创建,所以,每一个IP仅创建一个SSL会话;

        ssl握手要完成的工作:
            交换协议版本号
            选择双方都支持的加密方式
            客户端对服务器端实现身份验正
            密钥交换

        https协议: 基于SSL二进制编码, 443/tcp
            openssl s_client

        客户端验正服务器端证书:
            有效性检测:证书是否仍然在有效期内
            CA的可信度检测:
            证书的完整性检测:
            持有者的身份检测

        配置httpd工作于https:
        (1) 安装mod_ssl模块
       

# yum install mod_ssl

        (2) 为服务端生成私钥,并为其提供证书;
       

# mkdir /etc/httpd/ssl && cd /etc/httpd/ssl 
# (umask 077; openssl genrsa -out httpd.key 1024) 
# openssl req -new -key httpd.key -out httpd.csr

        签署后的证书为:/etc/httpd/ssl/httpd.crt

        (3) 配置使用https的虚拟主机;

        SSLCertificateFile
        SSLCertificateKeyFile

        <VirtualHost IP:443>
            DocumentRoot
            ServerName
        </VirtualHost>

        (4) 重新装载配置

        (5) 测试
       

# openssl s_client -connect IP:PORT -CAfile /path/to/ca_certificate

    httpd程序包自带的工具介绍

        httpd:
            apache服务器程序

            -t: 测试配置文件
            -l: 列表静态模块
            -D DUMP_MODULES:列出DSO模块
            -M:
            -D DUMP_VHOSTS: 列出所有虚拟主机

        htpasswd:
            为基于文件的basic认证创建和更新用户认证文件

        apachectl:
            脚本,httpd服务控制工具;

        ab: apache benchmark
            httpd的基准性能测试工具;

        apxs:
            httpd得以扩展使用第三方模块的工具;

        htcacheclean:
            磁盘缓存清理工具;

        htdigest:
            为digest认证创建和更新用户认证文件

        httxt2dbm:
            为rewrite map创建dbm格式的文件

        rotatelogs:
            不关闭httpd而切换其使用日志文件的工具

            access_log, access_log.1, access_log.2,

        suexec:
            User apache
            Group apache

            当httpd进程需要以另外的用户的身份去访问某些资源时,可以以suexec作临时切换;

    

    23、资源限定
        软限定:可临时超出一定时长的上限
        硬限定:绝对不可超出的上限

        管理员可使用ulimit命令临时性地修改各种资源的软限制;
            ulimit -n #:能同时打开的文件数
                   -u #: 能同时启动的进程数

        配置文件:
           

/etc/security/limits.conf             
/etc/security/limits.d/*.conf


    24、编译安装httpd-2.4
        

编译安装httpd,httpd程序依赖于apr和apr-util,故下载源码httpd-2.4.9.tar.bz2和apr-1.5.0.tar.bz2 ,apr-util-1.5.3.tar.bz2

先安装apr,解压

#  tar xf apr-1.5.0.tar.bz2

cd到apr-1.5.0

执行

# ./configure –prefix=/usr/local/apr
# make && make install;

然后安装apr-util

# tar apr-util-1.5.3.tar.bz2
# cd apr-util-1.5.3
# ./configure –prefix=/usr/local/apr-util –with-apr=/usr/local/apr
# make && make install;

编译安装httpd

# tar xf httpd-2.4.9.tar.bz2
# cd httpd-2.4.9
#  ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 
--enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre 
--with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util 
--enable-modules=most --enable-mpms-shared=all --with-mpm=event
#  make && make install。

配置http的启动;

#  cd /etc/httpd24

为保险备份一份httpd.conf

#  cp httpd.conf httpd.conf.bak

编辑httpd.conf

# vim httpd.conf

加入PidFilewKiom1Prb-_AhJ5GAAAqE6hq5mA760.jpg

编辑

 # vim /etc/rc.d/init.d/httpd24

提供SysV服务脚本到/etc/rc.d/init.d/httpd24

#!/bin/bash
#
# httpd        Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server.  It is used to serve \
#        HTML files and CGI.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd.pid

# Source function library.
. /etc/rc.d/init.d/functions

if [ -f /etc/sysconfig/httpd ]; then
        . /etc/sysconfig/httpd
fi

# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}

# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""

# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.

# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0

start() {
        echo -n $"Starting $prog: "
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}

stop() {
  echo -n $"Stopping $prog: "
  killproc -p ${pidfile} -d 10 $httpd
  RETVAL=$?
  echo
  [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
    echo -n $"Reloading $prog: "
    if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
        RETVAL=$?
        echo $"not reloading due to configuration syntax error"
        failure $"not reloading $httpd due to configuration syntax error"
    else
        killproc -p ${pidfile} $httpd -HUP
        RETVAL=$?
    fi
    echo
}

# See how we were called.
case "$1" in
  start)
  start
  ;;
  stop)
  stop
  ;;
  status)
        status -p ${pidfile} $httpd
  RETVAL=$?
  ;;
  restart)
  stop
  start
  ;;
  condrestart)
  if [ -f ${pidfile} ] ; then
    stop
    start
  fi
  ;;
  reload)
        reload
  ;;
  graceful|help|configtest|fullstatus)
  $apachectl $@
  RETVAL=$?
  ;;
  *)
  echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
  exit 1
esac

exit $RETVAL

 

 

为其加执行权限

# chmod +x /etc/rc.d/init.d/httpd24

添加至服务列表中

# chkconfig --add httpd24

wKioL1PrcTjh_e9xAABmzacAzRY477.jpg

启动

 # service http24 start.