httpd(apache)服务器--知识总结(1)

httpd的特性

1. 高度模块化:core + modules
2. DSO: Dynamic Shared Object(动态装载)
3. MPM:Multipath Processing Modules
    * prefork:多进程模型,每个进程响应一个请求;
        一个主进程:负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求;即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不会超过1024个;
    * worker:多线程模型,每个线程响应一个请求;
        一个主进程:生成多个子进程,每个子进程负责生个多个线程,每个线程响应一个请求;
                    m进程,n线程:m*n                 
    * event:事件驱动模型,每个线程响应n个请求;
        一个主进程:生成m个子进程,每个进程直接n个请求;
                    m*n

httpd-2.2: event为测试使用

httpd-.24:event可生产使用

httpd功能特性

* 虚拟主机
    IP、Port、FQDN
* CGI:Common Gateway Interface,通用网关接口;
* 反向代理
* 负载均衡
* 路径别名
* 丰富的用户认证机制
    basic
    digest
* 支持第三方模块

常用配置

        1. 修改监听的IP和Port
            Listen [IP:]PORT

            省略ip表示监听本机所有IP; Listen可重复出现多次;

        2. 持久连接
            Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成;
                如何断开?
                    数量限制:100
                    时间限制:可配置
                副作用:对并发访问量较大的服务器,持久连接功能会使用有些请求得不到响应;
                折衷:使用较短的持久连接时间;
                    httpd-2.4 支持毫秒级持久时间;
            非持久连接

            KeepAlive On|Off
            MaxKeepAliveRequests #
            KeepAliveTimeout #

            测试:
                telnet HOST PORT
                GET /URL HTTP/1.1
                Host: HOSTNAME or IP

        3. MPM
            Multipath Process Module:多道处理模块
                prefork, worker, event

            httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个;rpm安装的包提供三个二进制程序文件,分别用于实现对不同MPM机制的支持;确认方法:
                # ps aux  | grep httpd

            默认为/usr/sbin/httpd, 其使用prefork
                查看模块列表:
                    查看静态编译的模块
                        # httpd -l
                        Compiled in modules:
                          core.c
                          prefork.c
                          http_core.c
                          mod_so.c
                    查看静态编译及动态装载的模块
                        # httpd -M

            更换使用的httpd程序:
                /etc/sysconfig/httpd
                    HTTPD=

                重启服务生效;

            prefork的配置:
                <IfModule prefork.c>
                StartServers       8
                MinSpareServers    5
                MaxSpareServers   20
                ServerLimit      256
                MaxClients       256
                MaxRequestsPerChild  4000
                </IfModule>             

            worker的配置:
                <IfModule worker.c>
                StartServers         4
                MaxClients         300
                MinSpareThreads     25
                MaxSpareThreads     75
                ThreadsPerChild     25
                MaxRequestsPerChild  0
                </IfModule>

            PV, UV
                PV: Page View
                UV: User View
                    独立IP量;

                300*86400=40W+

        4. DSO
            配置指令实现模块加载
                LoadModule <mod_name> <mod_path>

                模块路径可使用相对地址
                    相对于ServerRoot(/etc/httpd)指向的路径而言;
                        /etc/httpd/modules/

        5. 定义'Main' server的文档页面路径
            DocumentRoot

            文档路径映射:
                DocumentRoot指向的路径为URL路径的起始位置;
                    DocumentRoot "/var/www/html"
                        test/index.html --> http://HOST:PORT/test/index.html

        6. 站点访问控制
            可基于两种类型的路径指明对哪些资源进行访问控制
                文件系统路径:
                    <Directory ""> </Direcotry>
                    <File ""> </File>
                    <FileMatch ""> </FileMatch>
                URL路径:
                    <Location ""> </Location>
                    ...

            访问控制机制:
                基于来源地址;
                基于账号;

        7. Directory中“基于来源地址”实现访问控制

            (1) Options
                所有可用特性:Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
                              None, All
                    Indexes: 索引;
                    FollowSymlinks:允许跟踪符号链接文件;

            (2) 基于来源地址的访问控制机制
                Order:检查次序
                    Order allow,deny
                    Order deny,allow
                Allow from
                Deny from

                来源地址:
                    IP
                    NetAddr:
                        172.16
                        172.16.0.0
                        172.16.0.0/16
                        172.16.0.0/255.255.0.0

        8. 定义默认主页面
            DirecotryIndex index.html index.html.var

        9. 日志设定

            错误日志:
                ErrorLog logs/error_log
                LogLevel warn

                    debug, info, notice, warn, error, crit, alert, emerg

            访问日志:
                CustomLog logs/access_log combined
                LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

                    %h:客户端IP地址;
                    %l: Remote logname (from identd, if supplied). -表示为空;
                    %u: Remote user,  (from auth; may be bogus if return status (%s) is 401);
                    %t:Time the request was received (standard english format),服务器收到请求的时间;
                    %r:First line of request,请求报文的道行信息(method url version);
                    %>s: 响应状态码;
                    %b: 响应报文的大小,单位是字节,不包括响应报文首部;
                    %{Referer}i:请求报文当中"referer"首部的值;当前资源的访问入口,即从哪个页面中的超链接跳转而来;
                    %{User-Agent}i:请求报文当中"User-Agent"首部的值;即发出请求用到的应用程序;

                详情:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

        10. 路径别名

            DocumentRoot "/www/htocs"
                http://www.magedu.com/download/bash-4.4.2-3.el6.x86_64.rpm
                    --> /www/htdocs/download/bash-4.4.2-3.el6.x86_64.rpm

            Alias /URL/ "/PATH/TO/SOMEDIR/" 

                Alias /bbs/ "/forum/htdocs"
                    http://www.magedu.com/bbs/index.html    
                        --> /forum/htdocs/bbs/

        11. 设定默认字符集
            AddDefaultCharset UTF-8

            GBK, GB2312, GB18030

        12. 基于用户的访问控制

            认证质询:
                WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户提供账号和密码;

            认证:
                Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过,则服务器发送响应的资源;

                认证类型:
                    basic:明文
                    digest:消息摘要

            安全域:需要用户认证后方能访问的路径;
                应该通过名称对其进行标识,并用于告知用户认证的原因;

            用户的账号和密码存储于何处?
                虚拟账号:仅用于访问某服务时用到的认证标识;

                存储:
                    文本文件
                    SQL数据库
                    ldap
                    nis

            basic认证:
                (1) 定义安全域(写到/etc/httpd/conf.d/httpd.conf里面)
                    <Directory "">
                        Options None
                        AllowOverride None
                        AuthType Basic
                        AuthName "Administator private"(随便起,登陆提示用)
                        AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"
                             (例/etc/httpd/conf.d/.htpasswd)
                        Require user username1 username2 ...
                             Require valid-user或者只允许哪几个Require user tom jerry
                    </Directory>

                        允许账号文件中的所有用户登录访问:
                            Require valid-user

                (2) 提供账号和密码存储(文本文件)
                    使用htpasswd命令进行管理
                        htpasswd [options] passwordfile username
                            -c: 自动创建passwordfile,因此,仅应该在添加第一个用户时使用;
                            -m: md5加密用户密码;
                            -s: sha1加密用户密码;
                            -D: 删除指定用户
                      htpasswd -c -m /etc/httpd/conf.d/.htpasswd tom
                (3) 实现基于组进行认证
                    <Directory "">                  
                        Options None
                        AllowOverride None
                        AuthType Basic
                        AuthName "STRING"
                        AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"
                        AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE"
                        Require group GROUP1 GROUP2 ...
                    </Directory>    

                    要提供:用户账号文件和组文件;

                        组文件:每一行定义一个组
                            GRP_NAME:user1 user2 user3 ...
                             webadmin: tom jerry

                    示例:
                        <Directory "/www/htdocs/admin">
                            Options None
                            AllowOverride None
                            AuthType Basic
                            AuthName "Administator private"
                            AuthUserFile "/etc/httpd/conf.d/.htpasswd"
                            AuthGroupFile "/etc/httpd/conf.d/.htgroup"
                            Require group webadmin
                        </Directory>

        13. 虚拟主机

            有三种实现方案:
                基于ip:
                    为每个虚拟主机准备至少一个ip地址;
                基于port:
                    为每个虚拟主机准备至少一个专用port;实践中很少使用;
                基于hostname:
                    为每个虚拟主机准备至少一个专用hostname;

                可混合使用上述三种方式中任意方式;

            注意:一般虚拟主机莫与中心主机混用,所以,要使用虚拟主机,先禁用中心主机;
                禁用中心主机:注释DocumentRoot

            每个虚拟主机都有专用配置:
                <VirtualHost "IP:PORT">
                    SeverName
                    DocumentRoot ""
                </VirtualHost>

                    ServerAlias: 虚拟主机的别名;
                    ErrorLog
                    CustomLog
                    <Directory "">
                    </Directory>

            示例1:基于ip
                <VirtualHost 172.16.100.6:80>
                    ServerName web1.magedu.com
                    DocumentRoot "/vhosts/web1/htdocs"
                </VirtualHost>

                <VirtualHost 172.16.100.7:80>
                    ServerName web2.magedu.com
                    DocumentRoot "/vhosts/web2/htdocs"
                </VirtualHost>

            示例2:基于port
                <VirtualHost 172.16.100.7:80>
                    ServerName web2.magedu.com
                    DocumentRoot "/vhosts/web2/htdocs"
                </VirtualHost>

                <VirtualHost 172.16.100.7:8080>
                    ServerName web3.magedu.com
                    DocumentRoot "/vhosts/web3/htdocs"
                </VirtualHost>

            示例3:基于hostname
                <VirtualHost 172.16.100.6:80>
                    ServerName web1.magedu.com
                    DocumentRoot "/vhosts/web1/htdocs"
                </VirtualHost>

                <VirtualHost 172.16.100.6:80>
                    ServerName web2.magedu.com
                    DocumentRoot "/vhosts/web2/htdocs"
                </VirtualHost>

                <VirtualHost 172.16.100.6:80>
                    ServerName web3.magedu.com
                    DocumentRoot "/vhosts/web3/htdocs"
                </VirtualHost>

        14. 内置的status页面
            <Location /server-status>
                SetHandler server-status
                Order deny,allow
                Deny from all
                Allow from 172.16
            </Location> 

            实现:基于账号实现访问控制
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值