httpd常用訪問控制配置,常見request響應碼以及MPM模型簡介

一、Centos7系統下實現httpd-2.2的安裝,並分別實現prefork、worker、event等幾種工作方式

  centos6中光盤的本地yum源默認httpd程序包是2.2版本的,而centos7中默認的httpd程序包2.4版本的,centos7要安裝httpd-2.2就要下載好源碼包和對應的依賴包進行編譯安裝,安裝之前先簡單講解一下httpd的這三種處理模型,需要注意的是httpd-2.2的event事件驅動模型還只是測試使用功能並且不支持同時編譯多個模塊,每次只能選定一個模塊。

其對應的配置文爲:/etc/httpd/conf/httpd.conf


  prefork:多進程模型,每個進程響應一個請求

    一個主進程:負責生產子進程及回收子進程,負責創建套接字,負責接收請求,並將其派發給某子進程進行處理n個子進程:每個子進程處理一個請求

    工作模型:會預先生成幾個空閒進程,隨時等待用於響應用戶請求,有最大空閒和最小空閒


  work:多進程多線程模型,每個線程處理一個用戶請求

     一個主進程:負責生成子進程,負責創建套接字,負責接收請求,比將其派發給某子進程進行處理多個子進程:每個子進程負責生成多個線程,每個線程:負責響應用戶請求

     併發響應數量:M*N

        M:子進程數量

        N:每個子進程所能創建的最大線程數量


  event:事件驅動模型,多進程模型,每個進程響應多個請求

     一個主進程:負責生成子進程,負責創建套接字,負責接收請求,比將其派發給某子進程進行處理

     子進程:基於事件驅動機制只想響應多個請求


     httpd-2.2:仍爲測試使用模型

     httpd-2.4:event可在生產環境中使用


以下爲編譯安裝httpd-2.2的步驟:

1.安裝依賴環境組包

~]#yum install zlib-devel-y

~]#yum install expat-devel -y

~]# yum groupinstall "Development Tools" "ServerPlatform Development" -y

2.提前下載好httpd安裝的依賴包apr/apr-util,並解壓安裝


~]# ls

apr-1.6.5.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.2.32.tar.gz

~]# tar -zxvf apr-1.6.5.tar.gz

~]# tar -zxvf apr-util-1.6.1.tar.gz

~]# cd apr-1.6.5

apr-1.6.5]#./configure --prefix=/usr/local/apr-httpd/ --with-apr=/usr/local/apr-httpd/

apr-1.6.5]# make && make install

apr-1.6.5]#cd /root/apr-util-1.6.1

apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util-httpd/ --with-apr=/usr/local/apr-httpd/

apr-util-1.6.1]# make && make install


3.編譯安裝httpd-2.2


apr-util-1.6.5]# cd ~

~]# tar -zxvf httpd-2.2.32.tar.gz

~]# cd httpd-2.2.32

httpd-2.2.32]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd/ --enable-so --enable-deflate --enable-headers --enable-rewrite --with-mpm=prefork --with-apr=/usr/local/apr-httpd/ --with-apr-util=/usr/local/apr-util-httpd/ --with-included-apr

httpd-2.2.32] make && make install


4.啓動httpd,並查看80端口是否監聽


apache]# /usr/local/apache/bin/httpd -k start

apache]# ss -tnl  | grep 80

LISTEN     0      128         :::80                      :::*                  



httpd2.2默認是prefork方式下工作的,要在幾個工作方式中切換,則需要修改etc/sysconfig/httpd下對應的配置,並重啓服務即可。


~]# vim /etc/sysconfig/httpd

#HTTPD=/usr/sbin/httpd.worker

HTTPD=/usr/sbin/httpd.event     #將該選項切換到對應模式,重啓服務即可







二、簡述request報文請求方法和狀態響應碼


 http請求報文:http request

           http響應報文:http response

              一次http事務:請求<-->響應

      http事務:

         請求:request

         響應:response



         報文語法格式:

            request報文

               <method><request-URL><version>

                  <HEADERS>


                  <enter-body>



            response報文

               <version><status><reason-phrsse>

                  <HEADERS>


                  <enter-body>



           method:請求方法,標明客戶端希望服務器對資源進行的動作

              GET,HEAD,POST,PUT(DAV),DELETE,TRACE,OPTIONS

           version:

              HTTP/<major><minor>

           status:

              三位數字:如200,301,302,404,502;標記請求處理過程中發生的情況

           reason-phrase:

              狀態碼所標記的狀態的簡要描述

           headers:

              每個請求或響應報文可包含任意個首部,每個首部都有首部名稱,後面各一個冒號,而後跟上一個可選空格,接着是一個值

           enter-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:成功,請求的所有數據通過響應報文的enter-body部分發送;OK

              301:請求的URL指向的資源已經被刪除,但在響應報文中通過首部Location指明瞭資源現在所處的新位置;Moved Permanently

              302:與301相似,但在響應報文中通過Location指明資源現狀所處臨時新位置;Found

              304:客戶端發出了條件式請求,但服務器上的資源未曾發生改變,則通過響應此響應狀態碼通知客戶端;Not Modified

              401:需要輸入賬號和密碼認證方式方能訪問資源;Unauthorized

              403:請求被禁止;Forbidden

              404:服務器無法找到客戶端請求的資源;Not Found

              500:服務器內部錯誤;Internal Server Error

              502:代理服務器從後端服務器收到了一條僞響應;Bad Gateway



三、詳細描述httpd虛擬主機、站點訪問控制、基於用戶的訪問控制、持久鏈接等應用配置實例


httpd基於虛擬主機:


虛擬主機


   站點標識:socket

     IP相同,但端口不同

     IP不同,但端口均爲默認端口

     FQDN不同:

       請求報文首部

       Host:www.listen.com



   有三種實現方案:

     基於IP:

       爲每個虛擬主機準備至少一個IP地址


    基於port:

       爲每個虛擬主機使用至少一個獨立的port


    基於FQDN:

       爲每個虛擬主機使用至少一個FQDN


    注意:一般虛擬主機不要與中心主機混用,因此,要使用虛擬主機,得先禁用“main”主機

       禁用方法:註釋中心主機的DocumentRoot指令即可



    虛擬主機的配置方法:

       <VirtualHost IP:PORT>

          ServerName FQDN

          DocumentRoot ""

       </VirtualHost>


    其他可用指令:

       ServerAlias:虛擬主機的別名,可多次使用

       ErrorLog:錯誤日誌

       CustomLog:訪問日誌

          <Directory "">

              ....

          </Directory>

          Alias

             ......



    基於IP的虛擬主機示例:

       <VirtualHost 192.168.73.137:80>

          ServerName www.ilinux.com

          DocumentRoot "/var/www/ilinux"

          <Directory "/var/www/ilinux/">

            Options None

            Allowoverride None

            Require all granted

          </Directory>

          Customlog "logs/ilinux_access.log"   combined

        </VirtualHost>



        <VirtualHost 192.168.73.138:80>

           ServerName www.iunix.com

           DocumentRoot "/var/www/iunix"

           <Directory "/var/www/iunix/">

             Options None

             Allowoverride None

             Require all granted

           </Directory>

           Customlog "logs/iunix_access.log"   combined

        </VirtualHost>

             


    基於端口的虛擬主機:

        <VirtualHost 192.168.73.137:80>

           ServerName www.ilinux.com

           DocumentRoot "/var/www/ilinux"

           <Directory "/var/www/ilinux/">

              Options None

              Allowoverride None

              Require all granted

           </Directory>

           Customlog "logs/ilinux_access.log"   combined

        </VirtualHost>



        <VirtualHost 192.168.73.137:8080>

           ServerName www.iunix.com

           DocumentRoot "/var/www/iunix"

           <Directory "/var/www/iunix/">

              Options None

              Allowoverride None

              Require all granted

           </Directory>

           Customlog "logs/iunix_access.log"   combined

        </VirtualHost>   



    基於FQDN的虛擬主機:

        <VirtualHost 192.168.73.137:80>

           ServerName www.ilinux.com

           DocumentRoot "/var/www/ilinux"

           <Directory "/var/www/ilinux/">

             Options None

             Allowoverride None

             Require all granted

           </Directory>

           Customlog "logs/ilinux_access.log"   combined

       </VirtualHost>



       <VirtualHost 192.168.73.137:80>

          ServerName www.iunix.com

          DocumentRoot "/var/www/iunix"

          <Directory "/var/www/iunix/">

             Options None

             Allowoverride None

             Require all granted

          </Directory>

          Customlog "logs/iunix_access.log"   combined

      </VirtualHost>  



     注意:如果是httpd-2.2,則使用基於FQDN的虛擬主機時,需要事先使用如下指令:

        NameVirtualHost IP:PORT




站點訪問控制常見機制

  可基於兩種機制指明對哪些資源進行何種訪問控制


    文件系統路徑:

       <Directory "">

          ...

       </Directory>


       <File "">

          ....

       </File>

                  

       <FileMatch "">

          .....

       </FileMatch>



    URL路徑:

      <Location "">

         ....

      </Location>


      <LocationMatch "">

         ....

      </LocationMatch>



      <Directory>中“基於源地址”實現訪問控制



    httpd-2.2

      (1)AllowOverride

         與訪問控制相關的那些指令可以放在.htaccess文件(每個目錄下都可以有一個)中

            ALL

            None


      (2)order和allow、deny

          order:定義生效次序,寫在後面的表示默認法則


          Allow from,Deny from

            來源地址:

              IP

              NetAddr:

                192.168

                192.168.0.0

                192.168.0.0/24

                192.168.0.0/255.255.255.0



    httpd-2.4

       基於IP控制:

          Require ip IP地址或網絡地址

          Require not ip IP地址或網絡地址


       基於主機名控制

          Require host 主機名或域名

          Require not host 主機名或域名




    控制頁面資源允許所以來源的主機可訪問:

       httpd-2.2

         <Directory "">

            ...

           Order allow,deny

           Allow from all

         </Directory>


       httpd-2.4

         <Directory "">

            ...

            Require all granted

         </Directory>



    控制頁面資源拒絕所有來源的主機可訪問:

       httpd-2.2

          <Directory "">

             ...

            Order allow,deny

             Deny from all

          </Directory>



       httpd-2.4

           <Directory "">

              ...

              Require all denied

           </Directory>



       Options

         後跟1個或多個空白字符分隔的“選項”列表

            Indexes:指明的URL路徑下不存在與定義的主頁面資源相符的資源文件時,返回索引列表給用戶

            FollowSymLinks:允許跟蹤符號鏈接文件所指向的源文件

            None

            All:All options except for MultiViews.










基於用戶的訪問控制


   認證質詢:

     WWW-Authenticate:響應碼爲401,拒絕客戶端請求,並說明要求客戶端提供賬號和密碼


   認證:

     Authorization:客戶端用戶填入賬號和密碼後再次發動請求報文,認證通過時,則服務器發送響應的資源


       認證的方式有兩種:

         basic:明文

         digest:消息摘要認證


   安全域:需要用戶認證後方能訪問的路徑,應該通過名稱對其進行標識,以便於告知用戶認證的原因


       用戶的賬號和密碼存放於何處?

          虛擬賬號:僅能用於訪問某服務時用到的認證標識


          存儲:

            文本文件

            SQL數據庫

            ldap目錄存儲


       basic認證配置示例:

         (1)定義安全域

            <Directory "">

              Options None

              AllowOverride None

              AuthType basic

              AuthName "提示的說明"

              AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"

              Require user username1 username2 ...

            </Directory>


            允許賬號文件中的所有用戶登錄訪問: 

              Require valid-user



         (2)提供賬號和密碼存儲(文本文件)

            使用專用命令完成此類文件的創建及用戶管理

               htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE username

                  -c:自動創建此處指定的文件,因此,僅應該在此文件不存在時使用

                  -m:MD5格式加密

                  -s:sha格式加密

                  -D:刪除指定用戶

                  -b:批模式添加用戶

                      htpasswd -b [options] /PATH/TO/HTTPD_PASSWD_FILE username password


          另外:基於組賬號進行認證

            (1)定義安全域

                <Directory "">

                  Options None

                  AllowOverride None

                  AuthType basic

                  AuthName "提示的說明"

                  AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"

                  AuthGroupFile "/PATH/TO/HTTPD_USER_GROUPE_FILE"

                  Require group grpname1 grpname2 ...

                </Directory> 


             (2)創建用戶賬號和組賬號文件

                組文件:每一行定義一個組

                   GRP_NAME:username1 username2 ...  



持久連接

   Persistent Connection:tcp連接建立後,每個資源獲取完成後不全斷開連街,而是繼續等待其他資源請求的進行

     如何斷開?

       數量限制

       時間限制


       副作用:對併發訪問量較大的服務器,長連接機制會使得後續某些請求無法得到正常響應

       折中:使用較短的持久連接時長,以及較少的請求數量



     KeepAlive ON|OFF

     KeepAliveTimeout 15

     MaxKeepAliveRequests 100


   測試:

     telnet WEB_SERVER_IP PORT

     GET /URL HTTP/1.1

     Host:WEB_SERVER_IP


  注意:httpd-2.4的KeepAliveTimeout可以是毫秒級的


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章