httpd软件详解

Web Service
传输层:提供进程地址
Port Number:
tcp:传输控制协议,面向连接的协议:通信钱需要建立虚拟链路,结束后拆除链路
0-65535
udp:User Datagram Protocol,无连接的协议
0-65535
IANA:
0-1023:特权端口,这些端口永久分配给固定的应用使用,22/tcp(ssh),80/tcp(http),443/tcp(https)
1024-41951:亦为注册端口,但要求并不是特别严格,分配给程序注册的某应用使用,11211/tcp,11211/udp(memcache),3306/tcp(mysql)
41952+:客户端程序随机使用的端口:动态端口或私有端口,其范围的定义: /proc/sys/net/ipv4/ip_local_port_range

Socket:IPC的一种实现,运行位于不同主机(甚至同一主机)上不同进程之间进行通信:数据交换,Socket API
    SOCK_STREAM:tcp套接字
    SOCK_DGRAM:UDP套接字
    SOCK_RAW:裸套接字

Socket Domain(根据其所使用的地址)
    AF_INET:Address Family,ipv4
    AF_INET:Address Family,ipv6
    AF_UNIX:同一主机不同进程之间通信时使用

    每类套接字都至少提供了两种socket;流,数据报
        流:可靠地传递、面向连接、无边界
        数据包:不可靠地传递、有边界、无连接

套接字相关的系统调用:
    socket():创建一个套接字
    bind():绑定
    listen():监听
    accept():接收请求
    connect():请求连接建立
    write():发送
    read():接收数据
        send(),recv(),sendto(),recvfrom()

IPV4:
    分类:
        A:1-127
        B:128-191
        C:192-223
        D:224-239
        E:240-254
    私有地址:
        A:10.0.0.0/8
        B:127.16.0.0/16-172.31.0.0/16
        C:192.168.0.0/24-192.168.255.0/24

TCP协议的特性:
    建立连接:三次握手
    将数据打包成端:校验和(CRC-32)
    确认、重传以及超时;
    排序、逻辑序号
    流量控制、滑动窗口算法
    拥塞控制:慢启动和拥塞避免算法

http:hyper text transfer protocol
    html:编程语言,超文本标记语言
    <html>
        <head>
            <title>
                TITLE
            </titlet>
        </head>
        <body>
            <h1></h1>
                <p>test..<a href="http://www.sjie.com/logo.jpg">sjie</a></p>
            <h2></h2>
        </body>
    </html>

    CSS:层叠样式表(cascading Style Sheet)
    JS:JavaScript
    MIME:Multipurpose Internet Mail Extesion

    工作机制:
        http请求
        http响应
    
    web资源:web resource
        静态文件:.jpg .gif .html .txt .css .js .mp3 .avi
        动态文件:.php .jsp

        媒体:
            媒体类型(MIME类型):major/minor
                text/html
                text/plain
                image/jepg
                image/gif
    URI:Uniform Resource Identifier
        URL:uniform Resource Locator,用来描述某服务器某特定资源的位置
            Scheme://Server:Port/path/to/resource
                http://www.sjie.com/images/logo.jpg
        URN:Uniform Resource Naming

    Http协议版本:
        HTTP/0.9:原型版本
        HTTP/1.0: 第一个广泛使用的版本,支持MIME
        HTTP/1.1:增强了缓存功能
        spdy:Google研发的
        HTTP/2.0:

    一次完整的HTTP请求:
        (1)建立或处理请求:接收请求或拒绝请求
        (2)接收请求:
            接收来自于网络的请求报文中对某资源的一次请求的过程

            并发访问响应模式(web I/O):
                单进程I/O结构:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应
                多进程I/O结构:并行启动多个进程,每个进程响应一个请求
                复用I/O结构:一个进程响应n个请求:
                    多线程模型:一个进程生成N个线程,每个线程响应一个用户请求
                    事件驱动:event-driver
                复用的多进程I/O结构:启动多个进程,每个进程响应N个请求

        (3)处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息
            元数据:请求报文首部
                <method> <URL> <VERSION>
                Host:www.sjie.com  请求的主机名称
                Connection:

        (4)访问资源:获取报文中请求的资源
            web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源,这些资源放置于本地文件系统某路径下,此路径通常称为DocRoot
            web服务器资源路径映射方式:
                (a) docroot
                (b) alias
                (c) 虚拟主机docroot
                (d) 用户家目录docroot

        (5)构建响应报文:
            资源的MIME类型:
                显式分类
                魔法分类
                协商分类
            URL重定向:
                web构建的响应并发客户端请求的资源,而是资源另外一个访问路径
        (6)发送响应报文

        (7)记录日志

    HTTP服务器程序:
        httpd(apache)
        nginx
        lighttpd

        应用程序服务器:
            IIS
            tomcat,jetty,jboss,resin
            webshpere,weblogic,oc4j

    HTTPD的安装配置和使用
        httpd:apache

        httpd的特性:
            高度模块化:core + modules
            DSO:Dynamic Shared Object
            MPM:Multipath Processing Modules
                perfork:多进程模型,每个进程响应一个请求:
                    一个主进程,负责生产n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求,即使没有用户请求,也会预先生成多个空闲进程,随时等待请求到达,最大不会超过1024个

                worker:多线程模式(多进程生成的,一个进程生成多个线程),一个线程响应一个请求
                event:事件驱动模型,一个线程响应多个请求

        HTTPD安装:
            安装方式:
                rpm
                编译
            程序环境:
                配置文件:
                    /etc/httpd/conf/httpd.conf
                    /etc/httpd/conf.d/*.conf
                服务脚本:
                    /etc/rc.d/init.d/httpd
                    配置文件:/etc/sysconfig/http
                主程序文件:
                    /usr/sbin/httpd
                    /usr/sbin/httpd.event
                    /usr/sbin/httpd.worker
                日志文件目录:
                    /var/log/httpd
                        access_log:访问日志
                        error_log:错误日志
                站点文档目录:
                    /var/www/html
                模块文件路径:
                    /usr/lib64/httpd/modules
                配置文件的组成:
                    grep "Section" /etc/httpd/conf/httpd.conf
                    ##Section 1: Global Environment
                    ##Section 2: 'Main' server configuration
                    ##Section 3: Virtual Hosts
                    配置格式: directive value
                        directive:不区分字符大小写
                        value:为路径时,取决于文件系统
            常用配置:
                1,修改监听的IP和Port
                    Listen [IP:]PORT
                    省略IP表示监听本机所有IP;Listen可重复出现多次
                2,持久连接
                    Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其他的请求完成
                        如果断开?
                            数量限制:100
                            时间限制:可配置
                        副作用:对并发访问量较大的服务器,持久连接功能会使用有些请求得不到响应
                        折中:使用较短的持久连接时间
                            httpd-2.4 支持毫秒级持久时间
                    非持久连接

                    KeepAlive On|Off
                    MaxKeepAliveRequests
                    KeepAliveTimeout 
                 3,MPM
                    Multipath Process Module:多信道处理模块
                        prefork,worker,event
                    httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个;rpm安装的包提供三个二进制程序文件,分别用于实现对不同MPM机制的支持,默认为prefork
                    httpd -l : 查看编译的模块
                    更换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>
                4,DSO
                    配置指令实现模块加载
                        LoadModule <mod_name> <mod_path>

                        模块路径可使用相对地址
                            相对于ServerRoot指向的路径而言:
                                /etc/httpd/module
                5,定义'Main' server的文档页面路径
                    DocumentRoot

                    文档路径映射:
                        DocumentRoot指向的路径为URL路径的起始位置:
                            DocumentRoot "/var/www/html"
                                test/index.html -->http://HOST:PORT/test/index.html
                6,站点访问控制
                    可基于两种类型的路径指明对哪些资源进行访问控制
                        文件系统路径:
                            <Directory ""></Directory>
                            <File ""></File>
                            <FileMatch ""></FileMatch>
                        URL路径:
                            <Location ""></Location>
                    访问控制机制
                        基于来源IP:
                        基于账号:
                7,Directory中基于来源地址实现访问控制
                    (1)Options
                        所有可用特性:Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
                            Indexes:索引;
                            FollowSymlinks:允许跟踪符号链接文件
                    (2)基于来源地址的访问控制机制
                        Order:检查次序
                        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,定义默认主页面
                    DirectoryIndex 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) -表示为空;
                            %t:服务器收到请求的时间;
                            %r:请求报文的首行信息(method url version);
                            %>s:响应状态码
                            %b:响应报文的大小,单位是字节,不包括响应报文的首部
                            %{Referer}i:请求报文当中的"referer"首部的值,当前资源的访问人口,即从哪个页面中的超链接跳转而来;
                            %{User-Agent}i:请求报文当中"User-Agent"首部的值:即发出请求用到的应用程序
                10,路径别名
                    Alias /URL/ "/PATH/TO/SOMEDIR/"
                        Alias /bbs/ "/forum/htdocs"
                            http://www.sjie.com/bbs/index.html
                                --> /forum/htdocs/bbs/
                11,设定默认字符集
                    AddDefaultCharset UTF-8

                12,基于用户的访问控制

                    认证质询:
                        WWW-Authenticate:响应码是401,拒绝客户端请求,并说明要求客户提供账号和密码
                    认证:
                        Authentization:客户端用户填入账号和密码后再次发送请求报文,认证通过,则服务器发送响应的资源
                            认证类型:
                                basic:明文
                                digest:消息摘要
                        安全域:需要用户认证后方能访问的路径:
                            应该通过名称对其进行标识,并用户告知用户认证的原因
                        用户账号和密码存储于何处
                            虚拟账号:仅用于访问某服务时用到的认证标识
                            存储:
                                文本文件
                                SQL数据库
                                ldap
                                nis
                        basic认证:
                            (1)定义安全域
                                <Directory "">
                                    Options None
                                    AllowOverride None
                                    AuthType Basic
                                    AuthName "STRING"
                                    AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"
                                    Require user username1 username2  #允许文件中的所有用户 Require valid-user
                                </Directory>
                            (2)提供账号和密码存储(文本文件)
                                使用htpasswd命令进行管理
                                    htpasswd [options] passwordfile username
                                        -c:自动创建passwordfile,因此仅在创建第一个用户时使用
                                        -m:使用MD5加密用户密码文件
                                        -s:sha1加密用户密码
                                        -D:删除指定用户
                            (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>
                                 需要用户账号文件和组文件:
                                    组文件:每一行定义一个组
                                        GROUP_NAME:user1 user2 user3 ...

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

                    注意:一般虚拟主机莫与中心主机混用,要使用虚拟主机,先禁用中心主机:
                        禁用中心主机:注释DocumentRoot
                    每个虚拟主机都有专用配置:
                        <VirtualHost "IP:PORT">
                            ServerName
                            DocumentRoot ""
                        </VirtualHost>

                            SeverAlias:虚拟主机的别名
                            ErrorLog
                            CustomLog
                            <Directory>
                            </Directory>

                        基于IP地址的虚拟主机:
                            <VirtualHost 192.168.1.1:80>
                                ServerName web1.sjie.com
                                DocumentRoot "/vhosts/web1/htdocs"
                            </VirtualHost>
                            <VirtualHost 192.168.1.2:80>
                                ServerName web2.sjie.com
                                DocumentRoot "/vhosts/web2/htdocs"
                            </VirtualHost>
                        基于端口的虚拟主机:
                            <VirtualHost 192.168.1.1:80>
                                ServerName web1.sjie.com
                                DocumentRoot "/vhosts/web1/htdocs"
                            </VirtualHost>
                            <VirtualHost 192.168.1.1:8080>
                                ServerName web2.sjie.com
                                DocumentRoot "/vhosts/web2/htdocs"
                            </VirtualHost>
                        基于主机名的虚拟主机:
                            <VirtualHost 192.168.1.1:80>
                                ServerName web1.sjie.com
                                DocumentRoot "/vhosts/web1/htdocs"
                            </VirtualHost>
                            <VirtualHost 192.168.1.1:80>
                                ServerName web2.sjie.com
                                DocumentRoot "/vhosts/web2/htdocs"
                            </VirtualHost>

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

                15,使用mod_deflate模块压缩页面优化传输速度
                    适用场景:
                        (1) 节约带宽,额外消耗CPU,同事有些老的浏览器不支持
                        (2) 压缩适于压缩的资源,例如文件

                    SetOutputFilter DEFLATE
                    #压缩的资源类型
                    AddOutputFilterByType DEFLATE text/plain
                    AddOutputFilterByType DEFLATE text/html
                    AddOutputFilterByType DEFLATE application/xhtml+xml
                    AddOutputFilterByType DEFLATE text/xml
                    AddOutputFilterByType DEFLATE application/xml
                    AddOutputFilterByType DEFLATE application/x-javascript
                    AddOutputFilterByType DEFLATE text/javascript
                    AddOutputFilterByType DEFLATE text/css
                    DeflateCompressionLevel 9
                    BrowserMatch  ^Mozilla/4 gzip-only-text/html
                    BrowserMatch  ^Mozilla/4\.0[678] no-gzip
                    BrowserMatch  \bMSI[E] !no-gzip !gzip-only-text/html

                16,https

                    http over ssl = https 443/tcp
                    ssl:v3
                    tls:v1

                    ssl会话简化:
                        (1)客户端发送可供选择的加密方式,并向服务器请求证书
                        (2)服务器端发送整数以及选定的加密方式给客户端
                        (3)客户端取得整数并进行证书验证
                             如果信任给其发证书的CA
                             (a)验证证书来源的合法性:用CA的公钥解密证书上数字签名
                             (b)验证证书的内容的合法性
                             (c)检查证书的有效期限
                             (d)检查整数是否被吊销
                             (e)证书中拥有者的名字,与访问的目标主机要一致
                        (4)客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换
                        (5)服务用此密钥加密用户请求的资源,响应给客户端
                        注意:SSL会话是基于IP地址创建,所以单IP仅可以使用一个HTTPS拟主机

                    配置httpd支持https
                        (1)为服务器申请数字证书
                            测试:通过私有CA发证书
                                创建私有CA
                                在服务器创建证书签署请求
                                CA签证
                        (2) yum install -y mod_ssl
                            配置文件:/etc/httpd/conf.d/ssl.conf
                            DocumentRoot
                            ServerName
                            SSLCertificateFile
                            SSLCertificateKeyFile
                17,httpd自带的工具程序
                    
                    htpasswd:basic认证基于文件实现时,用到的账号密码文件生成工具
                    apachectl:httpd 自带的服务控制脚本,支持start,stop
                    apxs:由httpd-devel包提供,扩展httpd使用第三方模块的工具
                    rotatelogs:日志滚动工具
                    suexec:访问某些有特殊权限配置的资源时,临时切换至指定用户运行
                    ab:Apache Benchmark
                        ab [options] URL
                            -n:总的请求数
                            -c:模拟的并发数
                            -k:以持久连接模式测试


        Http协议和HTTPD的配置

            URL:Uniform Resource Locator
                URL方案:scheme
                服务器地址:ip:port
                资源路径:

                基本语法:
                    <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
                        params:参数
                            http://www.sjie.com/bbs/hello;gender=f
                        query:查询
                            http://www.sjie.com/bbs/item.php?username=tom&title=abc
                        frag:锚定
                            http://www.sjie.com/doc/install/index.html#rpm

            HTTP协议:
                HTTP/0.9 HTTP/1.0 HTTP/1.1 HTTP/2.0

                HTTP协议,stateless
                    服务器无法持续追踪访问者来源
                        cookie,session

                    报文语法格式:
                        request报文
                            <method><request-url><version>
                            <headers>
                            <entity-body>

                        response报文:
                            <vsersion><status><reason-phrase>
                            <headers>
                            <entitiy-body>


                        method:请求方法,标明客户端希望服务器对资源执行的动作
                            GET,HEAD,POST
                        version:
                            HTTP/<major>.<minor>
                        status:
                            三位数字,如200,301,302,404,502;标记请求处理过程中发生的情况
                        reason-phrase:
                            状态码所标记的状态的简要描述
                        headers:
                            每个请求或响应报文可包含任意个首部,每个首部都有首部名称,后面跟一个冒号,而后跟上一个可选空格,接着就是一个指
                        entity-body:请求时附加的数据或响应时附加的数据

                    method方法:
                        GET:从服务器获取一个资源
                        HEAD:只从服务器获取文档的响应首部
                        POST:向服务器发送要处理的数据
                        PUT:将请求的主体部分存储在服务器上
                        DELETE:请求删除服务器的某个文档
                        TRACE:追踪请求到达服务器中间经过的代理服务器
                        OPTIONS:请求服务器返回对指定资源支持使用的请求方法

                        协议查看或分析工具:
                            tcpdump,tshark,wireshark

                    status(状态码)
                        1xx 100-101  信息提示
                        2xx 200-206  成功
                        3xx 300-305  重定向
                        4xx 400-415  错误类信息,客户端错误
                        5xx 500-505  错误类信息,服务器端错误

                        常用状态码:
                            200:成功,请求的所有数据通过响应报文的entity-body部分发送
                            301:请求的URL指向的资源以及被删除,但在响应报文中通过首部Location指明了资源现在所处的新位置:Moved Per
                            302:与301相似,但在响应报文中通过Location指明资源现在所处临时新位置:Found
                            304:客户端发出了条件式请求,但服务器上的资源未发生改变,则通过响应此响应码通过客户端:Not Modified
                            401:需要输入账号和密码认证方能访问资源:Unauthorized
                            403:请求被禁止:Forbidden
                            404:服务器无法找到客户端请求的资源:Not Found
                            500:服务器内部错误:Internal Server Error
                            502:代理服务器从后端服务器收到了一条伪响应:Bad Gateway


                    首部分类:
                        通用首部:
                            Date:报文的创建时间
                            Connection:连接状态,如keep-alive,close
                            Via:显示报文经过的中间节点
                            Cache-Control:控制缓存

                        请求首部:
                            Accept:通过服务器自己可接受的媒体类型
                            Accept-Charset:
                            Accept-Encoding:接受编码格式,如gzip
                            Accept-Language:接受的语言
                            Client-IP
                            Host:请求的服务器名称和端口号
                            Referer:包含当前正在请求的资源的上一级资源
                            User-Agent:客户端代理

                        响应首部:
                            信息性:
                                Age:响应持续时长
                                Server:服务器程序软件名称和版本
                            协商首部:
                                Accept-Ranges:服务器可接受的请求范围类型
                                Vary:服务器查看的其他首部列表
                            安全响应首部:
                                Set-Cookie:向客户端设置cookie
                                Set-Cookie2:
                                www-Authenticate:来自服务器的对客户端的质询认证表单

                        实体首部:
                            Allow
                            Location
                            Content-Encoding:
                            Content-Language:
                            Content-Length:主体的长度
                            Content-Location:实体的真正所处位置
                            Content-Type:主体的对象类型
                            Etag:实体的扩展标签
                            Expires:实体的过期时间
                            Last-Modified:最后一次修改的时间
                        扩展首部

        Curl命令用法:
            Curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP,FTPS,HTTP,HTTPS,GOPHER,TELENT,DIVCT,FILE及LDAP等协议。curl支持HTTPS的认证,并HTTP的POST,PUT等方法。

            curl [options] [URL]

                -A/--user-agent <string> 设置用户代理发送给服务器
                -basic 使用HTTP基本认证
                --tcp-nodelay 使用TCP_Nodelay认证
                -e/referer <URL> 来源网址
                --cacert <file> CA证书(SSL)
                --compressed 要求返回是压缩的格式
                -H/--header <line>自定义头信息传递给服务器
                -I/--head 只显示响应报文的首部信息
                --limit-rate <rate> 设置传输速度
                -u/--user <user[:passwd]> 设置服务器的用户和密码
                -0/--http1.0 使用HTTP1.0

            elinks [OPTIONS] [URL]
                --dump:不进入交互模式,把文档输出到标准输出

转载于:https://www.cnblogs.com/sjie0224/p/9154551.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值