zoukankan      html  css  js  c++  java
  • 3、Web server 之httpd2.2 配置说明

    http协议实现的程序

    静态(httpd, nginx, lighttpd)

    动态 (IIS, tomcat,  jetty,  jboss,  resin,  websphere, weblogic, oc4j)

    客户端工具 (telnet, elinks, curl)  纯文本协议访问工具

    HTTPD配置(端口、别名、访问控制、MPM、keep-alive、dso、DocumentRoot、DirectoryIndex、默认字符集、虚拟主机、mod_deflate模块、HTTPS配置)

    HTTPD工具(htpasswd, apxs, rotatelogs, suexec),HTTPD压力测试(ab, webbench, http_load, jmeter, loadrunner, tcpcopy)

    ASF: Apache Software Foundation  Apache 软件基金会

    FSF: Free Software Foundaton    自由软件基金会

    ASF赖以起家的是: httpd<命名:apache>


    HTTP安装

    httpd(2)    

       CentOS 6 默认提供rpm包 2.2版本

       CentOS 7 默认提供rpm包 2.4版本 (默认未安装)

    CentOS 6  httpd程序环境(rpm安装)

    /etc/httpd                   //ServerRoot  服务器根目录                        
    /etc/httpd/conf.d               //配置片段目录
    /etc/httpd/conf/httpd.conf           //主配置
    /etc/httpd/logs                //日志目录
    /etc/httpd/modules              //模块目录
    /etc/httpd/run                //运行中的进程的数据
    /etc/rc.d/init.d/httpd            //服务脚本
    /etc/sysconfig/httpd              //服务脚本配置
    
    /usr/lib/httpd/modules
    /usr/lib/httpd/modules/mod_actions.so     //DSO机制,动态共享对象
    /usr/sbin/apachectl               //apachectl程序
    
    主程序文件:
    /usr/sbin/httpd //MPM为IO,串行响应的进程 /usr/sbin/httpd.event //MPM为复用I/O模型,并行响应的进程 <2.2的httpd,event不成熟> /usr/sbin/httpd.worker //MPM............................. //ps axu | fgrep httpd可查看 /usr/share/doc/httpd-2.2.15 //<DOCUMENTATION> /usr/share/doc/httpd-2.2.15/ABOUT_APACHE /usr/share/doc/httpd-2.2.15/CHANGES /usr/share/doc/httpd-2.2.15/LICENSE /usr/share/doc/httpd-2.2.15/NOTICE /usr/share/doc/httpd-2.2.15/README /usr/share/doc/httpd-2.2.15/VERSIONING /usr/share/man/man8/apachectl.8.gz //<MAN Document> /usr/share/man/man8/htcacheclean.8.gz /usr/share/man/man8/httpd.8.gz /usr/share/man/man8/rotatelogs.8.gz /usr/share/man/man8/suexec.8.gz /var/cache/mod_proxy //<缓存目录> /var/lib/dav //<程序运行中的数据> /var/log/httpd //《日志目录》     access_log:访问日志
        errot_log: 错误日志
    /var/run/httpd //《运行中的httpd进程的数据》 /var/www/error/ //错误页面html网页存放目录

    站点文档目录 /var/www/html //DocuRoot目录,资源路径的根映射的位置

    httpd配置文件

    /etc/httpd/conf/httpd.conf 
    
    //首次配置需要备份文件:
    # cp -v /etc/httpd/conf/httpd.conf{,.bak}

    配置文件的组成:

    # fgrep 'Section' /etc/httpd/conf/httpd.conf  
    ### Section 1: Global Environment       //全局环境:定义httpd通用功能特性
    ### Section 2: 'Main' server configuration //主配置段:一个服务器提供单个站点
    ### Section 3: Virtual Hosts         //虚拟主机:一个服务器提供多个站点
    注: 2和3不能同时使用

    配置格式:directive value

      directive :不区分字符大小写

      value:为路径时,取决于文件系统



     三、HTTPD配置及应用

    3.1、修改监听的IP和Port

        Listen [IP:] PORT  :

    注:Listen 端口  ----- 省略IP 表示监听于所有网卡的IP

      Listen指令,可以使用多次,用于监听不同地址的不同端口之上

    e.g

      Listen 192.168.1.105:8080    //监听在改IP的8080端口之上,能与此IP通信的主机才能访问此进程

      Listen 80           //监听在所有接口的IP之上 

     注:修改端口后一定要重启, service httpd reload

    3.2、持久连接

    a)Persistent Connection :连接建立,每个资源获取完成后,不会断开连接,而是继续等待其它的请求完成

      一个pv(自引用多个链接指向)多个资源,每个资源都需要一个请求

      非持久连接:请求pv时,每个资源请求时,都需要建立tcp连接。<1.0默认>

      持久连接:请求pv时,首个资源需要建立tcp连接,不断开情况下,继续完成后续请求

    b)如何断开?

      • 限制:到达一定时间[def:75s]后,tcp连接自动断开。httpd-2.4支持毫秒级别
      • 数量限制:资源获取数量[def:100个]到达一定值时,tcp连接自动断开

    c)副作用:并发访问量过大场景,时间或数量限制过大时,可能会导致后续的请求被[拒绝服务],可以关闭或调整时间或数量限制

      折中:使用较短的持久连接时间

    e)<默认配置:关闭持久连接功能

     

     f)测试连接的关闭,显示结果

      非持久连接测试结果显示:

     

     

       持久连接测试结果显示:

     



     3.3 、MPM 多路处理模块---并发响应模块

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

      确认方法: ps aux | grep httpd  查看相应文件

    默认为/usr/sbin/httpd ,其使用prefork

    1)查看当前使用的模块

    wKiom1nIicPRum2HAAALYNPY1xs955.png

    2)查看装载的模块

    wKiom1nIigSSqJvAAAAveprtBf0459.png

    3)更换MPM模块----/etc/sysconfig/httpd

    wKioL1nIioaSF5NjAAApu3Z_RWw034.png

    更改为worker
    # awk '$1 != "#" && $0 !~ /^[[:space:]]*$/{print}' /etc/sysconfig/httpd 
    #HTTPD=/usr/sbin/httpd.worker
    HTTPD=/usr/sbin/httpd.worker
    #OPTIONS=
    #HTTPD_LANG=C
    #PIDFILE=/var/run/httpd/httpd.pid
    
    # service httpd restart
    # ps axu | fgrep httpd
    root     20183  0.0  1.4  11716  3560 ?        Ss   22:02   0:00 /usr/sbin/httpd.worker
    apache   20298  0.0  1.2 289448  3000 ?        Sl   22:02   0:00 /usr/sbin/httpd.worker
    
    更改为event
    # awk '$1 != "#" && $0 !~ /^[[:space:]]*$/{print}' /etc/sysconfig/httpd 
    #HTTPD=/usr/sbin/httpd.worker
    HTTPD=/usr/sbin/httpd.event
    #OPTIONS=
    #HTTPD_LANG=C
    #PIDFILE=/var/run/httpd/httpd.pid
    
    # service httpd restart
    # ps axu | fgrep httpd
    root     20360  0.6  1.4  12184  3556 ?        Ss   22:04   0:00 /usr/sbin/httpd.event
    apache   20363  0.0  1.1 289916  2916 ?        Sl   22:04   0:00 /usr/sbin/httpd.event
    apache   20364  0.0  1.1 289916  2904 ?        Sl   22:04   0:00 /usr/sbin/httpd.event
    apache   20365  0.0  1.1 289916  2904 ?        Sl   22:04   0:00 /usr/sbin/httpd.event

    MPM配置详解 /etc/httpd/conf/httpd.conf <网站的承载能力有一定影响>

    # prefork MPM
    # StartServers: 启动服务器后,预留的进程数
    # MinSpareServers: minimum number of server processes which are kept spare
    # MaxSpareServers: maximum number of server processes which are kept spare
    # ServerLimit: 服务器的生命周期内为MaxClients准备的最大值
    # MaxClients:  最大并发数
    # MaxRequestsPerChild: 每个进程最大响应请求数
    <IfModule prefork.c>
    StartServers       8  #服务启动时服务进程数
    MinSpareServers    5   #最小空闲进程数
    MaxSpareServers   20  #最大空闲进程数
    ServerLimit      256  #服务器进程数量最大值
    MaxClients       256  #最大并发请求数
    MaxRequestsPerChild  4000   #一个服务器进程最多能够响应多少次的请求
    </IfModule>
    
    # worker MPM
    # StartServers:  启动服务预留进程数
    # MaxClients:    最大并发数
    # MinSpareThreads: 最小并发数
    # MaxSpareThreads: maximum number of worker threads which are kept spare
    # ThreadsPerChild: 每个进程内的线程数
    # MaxRequestsPerChild: 每个线程最多响应请求数
    <IfModule worker.c>
    StartServers         4   #不包含主控进程
    MaxClients         300 
    MinSpareThreads     25
    MaxSpareThreads     75
    ThreadsPerChild     25  #每个进程所能够启动的线程数
    MaxRequestsPerChild  0 //0表示没有上限
    </IfModule>
    
    配置:影响网站的承载能力

    PV承载量= (每秒请求资源数 * 86400 )/每个页面的资源数    //满载工作

    考虑:全天满负荷运行?带宽使用大小200k?

      300*86400/50=40W  

    带宽:每个PV消耗多少KB * PV承载量

    PV :Page View 页面计数

    UV:User View 用户数量计数(独立IP数量)

    3.4、DSO

    配置指令实现模块加载

      使用语法:LoadModule  <模块名> <模块路径>

      模块路径可使用相对地址:相对于serverroot [/etc/httpd]  (CentOS 6)

        /etc/httpd/modules ----->/usr/lib64/httpd/modules

    重载配置文件,实现启动或禁用模块

    查看此模块已经被装载
    # httpd -M | fgrep deflate_module
    deflate_module (shared)
    
    禁用 (配置文件注释)
    # vim /etc/httpd/conf/httpd.conf
    #LoadModule deflate_module modules/mod_deflate.so
    
    重载 
    # service httpd reload
    
    查看 
    # httpd -M | fgrep deflate_module
    Syntax OK

    3.5、定义"Main"  server 的文档页面路径 

    注:先关掉selinux再测试-----setenforce 0

    文档路径映射:

      DocumentRoot 指向的路径为URL路径的起始位置:

      DocumentRoot  "/var/www/html"
          /var/www/html/index.html  -----> http://www.magedu.com/test/index.html
      注:
        #setenforing 0
        #iptables -F
        2.2版本修改DocumentRoot,不需要授权
        2.4版本修改DocumentRoot 需要对文件系统目录授权

    注意:

    ① 可以写多行,但是下边的会覆盖上边的,最后还是使用下边的,写到子配置文件一样,因为子配置文件Include conf.d/*.conf在这行设置的上边,会被这行设置覆盖。

    ② 若设置的主站点不存在,那么服务会启动失败!

    3.6、站点访问控制

    a)可基于两种类型的路径指明对那些资源进行访问控制

      文件系统路径:      

        DocumentRoot "/var/www/html"

        <Directory "">...</Directory>

        <Files "">...</File>

    e.g
    <Files ~ "^.ht"> Order allow,deny Deny from all Satisfy All </Files>

      URL路径:

         <Location "">...</Location>     

    b)访问控制机制:

      基于来源地址:Order , allow from 地址,deny from 地址

      基于用户账号控制 :LogFormat :%u

      

    c)基于用户访问控制的实现

      安全域:需要用户认证后方能访问的路径 

          应该通过名称对其进行标识,并用于告知用户认证的原因

      用户的账号和密码存储与何处

         虚拟账号:仅用于访问某服务时用到的认证标识(跟操作系统里面的账号没有任何关系)

      定义在/etc/httpd/conf/httpd.conf文件中

    wKioL1nHdruh4nagAAAtf6v6xVg314.png

    认证质询:

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

    认证:

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

      认证类型:

          basic :明文,放入https中进行【通用:浏览器大多数较老,不支持digest认证】//弹窗认证

          digest :消息摘要  发送账号及密码对应的md5码至服务器,服务器将md5码与存储的对应的md5码对比

      表单认证-----登录淘宝时输入的账号密码类型

    密码存储位置:文件、数据库、ldap、nis、认证系统

    •  ) 基于basic认证实现(了解)
      •     定义安全域
    <Directory "">
      Options None                      #访问目录中的文件特性
      AllowOverride None                   
      AuthType Basic                     #认证类型
      AuthName "STRING"                   #安全域
      AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"  #密码储存位置
      Require user <username1> <username2> ...        #可登录的用户
     # Require group GROUP1 GROUP2 ...     #基于组来认证是需要此步骤
    </Directory>
    允许账号文件中的所有用户登录访问:
      Require valid-user
    •   提供账号和密码存储(文本文件)

      使用htpasswd命令进行管理
        htpasswd [options] passwordfile  username

      • -c: 自动创建passwordfile,因此,仅应该在添加第一个用户时使用;
      • -m: md5加密用户密码;
      • -s: sha1加密用户密码;
      • -D: 删除指定用户

    e.g

    # echo "hello" > /www/htdocs/admin/index.html
    
    <Directory "/www/htdocs/admin">
        Options None
        AllowOverride None
        AuthType Basic
        AuthName "Administrator private"
        AuthUserFile "/etc/httpd/conf.d/.htpasswd"
        Require valid-user
    </Directory>
     
    # httpd -t
    # service httpd reload
    # htpasswd -c -m /etc/httpd/conf.d/.htpasswd tom  #第一次创建用户需-c
    # htpasswd  -m /etc/httpd/conf.d/.htpasswd obama
    # htpasswd  -m /etc/httpd/conf.d/.htpasswd obama

    基于组进行认证实现

    vim  /etc/httpd/conf.d/.htgroup  创建组文件并建立组名
      weblogic :tom obama
    <Directory "/www/htdocs/admin">
        Options None
        AllowOverride None
        AuthType Basic
        AuthName "Administrator private"
        AuthUserFile "/etc/httpd/conf.d/.htpasswd"
        AuthGroupFile "/etc/httpd/conf.d/.htgroup"
        Require group weblogic
    </Directory>
      要提供:用户账号文件和组文件;    
        组文件:每一行定义一个组     
         GRP_NAME:user1 user2 user3 ...

    3.7、默认主页面

    DirectoryIndex index.html index.html.var

    自左向右,依次匹配给出目录下的文件,存在时,显示

    3.8、 Directory 中“基于来源地址”实现控制”

    <Directory "/var/www/html">
    
      Options Indexes FollowSymLinks
      AllowOverride None
      Order allow,deny
      Allow from all
    
    </Directory>

    a)Options 选项

        所有可用特性:Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews

      常用选项:None, ALL

      Indexes  : 索引 ----- 允许索引  没有默认主页面时,显示欢迎界面【注:docroot与directory 修改路径要相同】

      FollowSymLinks :索引的文件是symolic link 时,允许跟踪符合链接文件

      SymLinksifOwnerMatch :属主匹配-----符号链接文件的属主与原文件属主为同一个用户时,才允许跟踪

       MultiViews  :是否允许多视图 内容协商:启动后性能差

       ExecCGI  :是否允许CGI接口

    b)AllowOverride ---是否允许覆盖选项   (了解)

      选项值:FileInfo  AuthConfig  Limit  None  ALL 

      是否允许当前的配置去覆盖每一个网站页面下的一个隐藏文件(./htaccess )

      ./htaccess   每个目录访问控制:灵活 但对性能影响非常大不启用

    c)基于来源地址的访问控制机制

    Order :检查次序  写在后面的位默认法则   
       Order allow,deny (白名单)    Order deny ,allow(黑名单)
      
        Allow from
        deny from
          后接 来源IP地址
             NetAddr :表示172.16网络的方式
             通配符:*.magedu.com

    修改配置文件如下信息及其显示结果:

     

     wKioL1nIlAPzwaFfAABUTJ7yPvk292.png-wh_50

    3.9 日志设置

    官网地址:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html

    http://httpd.apache.org/docs/2.2/logs.html

    a)错误日志

     

    日志为链接路径:/etc/httpd/logs ----->/var/log/httpd/

     

    b)访问日志

      CustomLog logs/access_log         combined    

     日志文件路径<相对于ServerRoot>    日志格式名<logformat>

    LogFormat格式

    •  combined 格式:
    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
    •  combinedio
    #LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio  
    记录日志时候,会根据这一次用户的请求 把这些宏替换成对应的相关信息
    e.g
    192.168.1.105 - tom [18/Sep/2017:02:59:24 +0800] "GET /admin/ HTTP/1.1" 304 11 "-" "Mozilla/5.0
    %h remote host      客户端IP地址
    %l remote logname   登录的用户名,mod_ident模块为空时,用 “_” 表示
    %u remote user     用户访问控制的basic,digst认证的用户名为空时,用 “_” 表示
    %t Time the request was received   服务器收到请求的时间
    %r First line of request        请求报文的首行  
    %>s  Status                响应状态码
    %b :响应报文的大小,单位是字节,不包括响应报文首部
    %{Referer}i :请求报文当中“referer”首部的值;当前页面(资源)的访问入口,即从哪个页面的超链接跳转而来
       “ _ ”  网站有名--直接从浏览器键入的,而不是从网页超链接跳转过去的
       “不为空时,网站的广告有效”  
    %{User-Agent}i :请求报文当中“User-Agent”首部的值;即发出请求用到的应用程序
       用户代理:发起请求的用到的进程<elink,ab,telnet,浏览器, curl>搜索引擎是爬虫爬出来的

    10、路径别名 

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

      注:URL后面存在“/” 时,路径后必须存在“/”

        /URL/被匹配是从资源路径的根起始的

    E.g

    • DocumentRoot "/www/htdocs"

        http://www.magedu.com/download/bash-4.4.2-3.el6.x84_64.rpm

           --->/www/htdocs/download/bash-4.4.2-3.el6.x84_64.rpm

    • Alias /bbs/  "/forum/htdocs/"

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

     

        例如:/www/forum    此处DocumentRoot为/www/forum
            文件系统路径:/www/forum/bbs/upload/a.rar
            则URL路径为:http://Server_IP/bbs/upload/a.rar
    
        # mkdir -p /www/forum
        # echo "This is a new site location" > /www/forum/index.html
        # vi /etc/httpd/conf/httpd.conf    ###修改为 /www/forum
        # service httpd reload
        # curl http://192.168.21.10
        This is a new site location

     11、字符集设定 (了解)

       AddDefaultCharset UTF-8

       全球:UTF-8

      国标:GBK,GB2312 ,GB18030 <中文>

       源文件中的编码应该与服务器的编码相同


     四、虚拟主机

    虚拟主机的类型

    •   基于IP :一个服务器有多个IP    (实践中很少使用)
    •   基于PORT :同一个IP,有多个PORT  (实践中很少使用)
    •   基于主机名hostname :同一个IP,有多个Host

     

    基于名称完成不同虚拟主机的识别

    封装时: HTTP首部、TCP首部、IP首部、帧首部..

        Host: 浏览器键入的主机名 //"应用层首部"中附加,非通信子网

    wKioL1nHkI7Qpg26AAA-43oHWTE933.png

     注:一般虚拟主机不可与中心主机混用,所以要使用虚拟主机,需先禁用中心主机

    4.1、配置前提  

       httpd2.2版本 注释中心主机DocumentRoot ,并启动 ServerName :NameVirtualHost *:80
       httpd2.4版本 注释中心主机DocumentRoot

    4.2、每个虚拟主机都有专用配置格式

    wKiom1nHkVzgBUthAAAwP9tuwwM958.png

    实例1  基于IP地址

    a) 在配置文件的最后写入一下字段:
    <VirtualHost 192.168.1.105:80> ServerName web1.douma.com DocumentRoot "/data/web1" </VirtualHost> <VirtualHost 192.168.1.25:80> ServerName web2.douma.com DocumentRoot "/data/web2" </VirtualHost>

    b) 然后创建对应位置:
    mkdir -pv /data/web{1,2}
    echo "web1 > /data/web1/index.html"
    echo "web2 > /data/web2/index.html"
    c) 添加一块网卡:
        ip addr add 192.168.1.25/24 dev eth0
      显示添加网卡:ip addr list

    实例:基于port实现 

    a) 配置文件的最后写入一下字段:
     <VirtualHost 192.168.1.105:8080>
                                    ServerName web3.douma.com
                                    DocumentRoot "/data/web3"
     </VirtualHost>
     <VirtualHost 192.168.1.105>
                                    ServerName web4.douma.com
                                    DocumentRoot "/data/web4"
     </VirtualHost>
    mkdir -pv /data/web{3,4}
    echo "web3 > /data/web3/index.html"
    echo "web4 > /data/web4/index.html"

    b) 开启监听8080端口
      Listen :8080

    实例3、基于Hostname实现

    a) 要开启NameVirtualHost:80 项
      修改配置文件
      NameVirtualHost 192.168.1.105:80
    注:选中部分要求一致
    <VirtualHost 192.168.1.105:80>
        ServerName web3.douma.com
        DocumentRoot "/data/web3"
    </VirtualHost>
    
    <VirtualHost 192.168.1.105:80>
        ServerName web4.douma.com
        DocumentRoot "/data/web4"
    </VirtualHost>
    c) 编辑/etc/hosts文件 添加如下内容
      192.168.1.105
    web3.douma.com
      192.168.1.105  web4.douma.com

    d)测试 curl http://
    web3.douma.com

     内置的status页面

      web的子功能

    访问结果显示如下:

    开启扩展信息:

      

    再互联网上访问上述信息:需基于账号实现访问控制 

    CentOS 7

    默认运行级别

      [root@localhost ~]# systemctl get-default
    multi-user.target

    修改运行级别

       [root@localhost ~]# systemctl set-default

     https://blog.51cto.com/sonlich/1968229

     https://blog.51cto.com/11010461/2109162

    https://www.cnblogs.com/dannylinux/articles/7999156.html

    https://www.aliyun.com/1111/2019/group-buying-share?ptCode=BD1104468FD85A9BBC32DA64D3419891647C88CF896EF535&userCode=sllkyfo6&share_source=copy_link 

  • 相关阅读:
    【大数据】中文词频统计
    【大数据】复合数据类型,英文词频统计
    Hadoop综合大作业
    分布式文件系统HDFS练习
    安装关系型数据库MySQL 安装大数据处理框架Hadoop
    爬取全部的校园新闻
    作业六|获取一篇新闻的全部信息
    理解爬虫原理
    作业——04 中文词频统计
    复合数据类型,英文词频统计
  • 原文地址:https://www.cnblogs.com/liuzhiyun/p/11737659.html
Copyright © 2011-2022 走看看