web服務之httpd-2.2配置詳解01

本文旨在複習httpd2.2常用配置。複習http協議相關知識、httpd2.2配置文件相關配置介紹、配置httpd的身份驗證、配置httpd虛擬主機 等等。


知識儲備:


http協議知多少?

http協議:

    HTTP:hyper text transfer protocol,超文本傳輸協議,是互聯網上應用最爲廣泛的一種網絡協議。HTTP是一個客戶端終端(用戶)和服務器端(網站)請求和應答的標準。通常,由HTTP客戶端發起一個請求,創建一個到服務器指定端口(默認是80端口)的TCP連接。HTTP服務器則在那個端口監聽客戶端的請求。一旦收到 請求,服務器會向客戶端返回一個狀態,比如"HTTP/1.1 200 OK",以及返回的內容,如請求的文件、錯誤消息、或者其它信息。


http協議版本:

    http/0.9:原型版本,功能簡陋

    http/1.0: cache,MIME,method

        MIME:Multipurpose Internet Mail Extension

        method(請求方法):GET,POST,HEAD,PUT,DELETE,TRACE,OPTIONS

    http/1.1: 增強了緩存功能

    http/2.0:


http工作模式:

    HTTP客戶端發起一個請求,創建一個到服務器指定端口(默認是80端口)的TCP連接。HTTP服務器則     在那個端口監聽客戶端的請求。一旦收到 請求,服務器會向客戶端返回一個狀態

    http請求報文:http request

    http響應報文:http response

    簡單來來說 一次http事務就是:請求<-->響應


web資源:web resource

    靜態資源:無需服務端做出額外處理。如:.jpg, .png, .gif, .html, .txt, .js,.css,                   .mp3,.avi 等。

    動態資源:服務端需要通過執行程序做出處理, 發送給客戶端的是程序的運行結果。

              如 .php,.jsp

    注意:一個頁面中展示的資源可能有多個,每個資源都需要單獨處理。


    資源標識:URL 統一資源標識符

        Uniform Resource Locator:用於描述服務器特定資源的位置

        例如: http://www.sina.com.cn/index.html

        Scheme://Server[:Port][/PATH/TO/SOME_RESOURCE]


一次完整的http請求處理過程:

    (1)建立或者處理連接;接收或者拒絕請求

    (2)接收請求;接收來自互聯網上的主機請求報文中對某特定資源的一次請求過程。

    (3)處理請求;對請求資源進行解析,獲取客戶端的請求資源及請求方法。

    (4)訪問資源:通過存儲IO獲取用戶的請求的資源。

    (5)構建響應報文

    (6)發送響應報文

    (7)記錄日誌


併發訪問響應模型:
    單進程I/O模型:啓動一個進程處理用戶請求;一次只能處理一個請求,多個請求被串行響應。

    多進程I/O模型:並行啓動多個進程,每個進程響應一個請求。

    複用I/O模型:一個進程響應n個請求。

        多線程模式:一個進程生成n個線程,一個線程處理一個請求。

        事件驅動(event-driven):一個進程直接處理n個請求。

    複用的多進程I/O模型:啓動多個(m)進程,每個進程生成(n)個線程。


http協議實現:

    靜態服務器技術:httpd(apache),nginx,lighttpd ...

    應用程序服務器:動態服務器技術,IIS: .net 、tomcat:.jsp


httpd測程序版本:

    httpd 1.3:官方已經停止維護

    httpd 2.0:

    httpd 2.2:MPM不支持DSO機制

    httpd 2.4:目前最新穩定版:支持DSO

    

 CentOS6.7中httpd-2.2配置詳解


 

1.httpd的相關功能

        CGI:Common Gateway Interface

        虛擬主機:IP,PORT, FQDN

        反向代理

        負載均衡:bytraffic,bybusiness,byrequest

        路徑別名

        豐富的用戶認證機制

            basic 

            digest

        支持第三方模塊

        ......

2.httpd的特性

    高度模塊化:core+modules

    DSO:dynamic shared object 動態共享對象

    MPM:Multipath processing Modules (多路處理模塊)

        prefork:多進程模型。一個主進程,多個子進程。每個進程響應一個請求;

            主進程:負責生成子進程及回收子進程;負責創建套接字;負責接收請求,並將其派發給

                    某子進程進行處理;

            n個子進程:每個子進程處理一個請求。

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

        worker:多進程多線程模型,一個線程響應一個用戶請求;

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

                        進行處理;

            多個子進程:每個子進程負責生成多個線程;

            每個線程:負責響應用戶請求;

            併發數量:m*n

                m:子進程數量

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

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

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

                       行處理

            子進程:基於事件驅動機制直接響應多個請求;

            

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

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

           

3.centos6:httpd-2.2程序環境

    配置文件:/etc/httpd/conf/httpd.conf、 /etc/httpd/conf.d/*.conf

    服務腳本:/etc/rc.d/init.d/httpd

        腳本配置文件:/etc/sysconfig/httpd

    主程序文件:

        /usr/sbin/httpd

        /usr/sbin/httpd.event

        /ust/sbin/httpd.worker

    日誌文件:

        /var/log/httpd:

            access_log:訪問日誌

            error_log:錯誤日誌

    站點目錄:

        /var/www/html

    模塊文件路徑:

        /usr/lib64/httpd/modules

    服務控制和啓動:

        chkconfig httpd on|off

        service httpd {start|stop|restart|status|configtest|reload}

         

4.httpd配置文件介紹       

    4.1 主配置文件:/etc/httpd/conf/httpd.conf

    ### Section 1: Global Environment

    ### Section 2: 'Main' server configuration

    ### Section 3: Virtual Hosts

    4.2 修改監聽的服務端口

         Listen  [IP:]PORT

         (1) 省略IP表示爲0.0.0.0

        (2)Listen指令可重複出現多次;             

        Listen  80
        Listen  8080

        (3)修改監聽socket,重啓服務進程方可生效;

    4.3 持久連接(長連接)

        Persistent Connection:tcp連接建立後,每個資源獲取完成後不全斷開連接,而是繼續等待

        其它資源請求的進行; 

        如何斷開持久連接?

            可以通過數量限制和時間限制

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

        代碼段:           

        KeepAlive  On|Off
        KeepAliveTimeout  15 持久連接的時間限制
        MaxKeepAliveRequests  100 持久連接時最大請求資源數量

 

    4.4 MPM-多路處理模塊

        httpd-2.2不支持同時編譯多個MPM模塊,所以只能編譯時選定一個;CentOS 6的rpm包爲此專門

        提供了三個應用程序文件,httpd(prefork), httpd.worker, httpd.event,分別用於實現對不

        同的MPM機制的支持。默認使用prefork的MPM模塊

        確認現在使用的那個程序文件的方法:

            # ps aux|grep httpd

        查看httpd程序的模塊文件列表:

            # httpd  -l

        查看靜態編譯及動態編譯的模塊:

            # httpd -M

        更換使用的httpd程序,以支持其它MPM機制:

            /etc/sysconfig/httpd

                HTTPD=/usr/sbin/httpd.{worker,event}

        注意:重啓服務進程才能生效

        

        MPM配置:           

            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 每個子進程在其生存期內允許伺服的最大請求數量,0表示進
                                    程永遠不會過期
             </IfModule>


    4.5 DSO 動態共享對象

            配置指定實現模塊加載

                LoadModule  <mod_name>  <mod_path>

            模塊文件路徑可使用相對路徑:

                相對於ServerRoot(/etc/httpd指向的路徑)


    4.6 DocumentRoot "Main" server的文檔頁面路徑

        DoucmentRoot指向的路徑爲URL路徑的起始位置

            其相當於站點URL的根路徑;

            (FileSystem) /data/vhosts1/index.html  -->  (URL)  /index.html

    

    4.8 站點訪問控制

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

        基於文件系統路徑:      

            <Directory  "/PATH/TO/SOME_DIR">    
            ...
            </Directory>
            <File  "">
            ...
            </File>
            <FileMatch  "PATTERN">
            ...
            </FileMatch>

          基於URL路徑:  

            <Location  "/PATH/TO/SOME_URL">        
            ...
            </Location>
            <LocationMatch "URL_PATTERN">
            ...
            </LocationMatch>

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

          (1) Options

              用於定義資源的展示方式,後跟1個或多個以空白字符分隔的“選項”列表;

                Indexes:

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

                    用戶。

                FollowSymLinks:

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

                ExecCGI:允許執行CGI腳本。

                None:

                All:   

           (2)AllowOverride

                httpd允許訪問控制相關的哪些指令可以放在.htaccess文件(每個目

                錄下都可以有一個)中;                    

                      /data/web/

                            .htaccess

    admin:.htaccess

    images:.htaccess

                 None:

                 All:

            

            (3)order,allow和eny from  

                 基於ip地址的訪問控制

                 order:定義allow和deny的生效次序;寫在後面的表示默認法則;

                    Allow from IP/NETWORK/FQDN

                    Deny from  IP/NETWORK/FQDN

                 來源地址格式:

                        IP或者Netaddr                       

                            172.16

    172.16.0.0

    172.16.0.0/16

    172.16.0.0/255.255.0.0

                  

                  來源請求遵循最佳匹配法則機制:

                        order allow,deny(默認機制)白名單

                        order deny,allow(默認機制) 黑名單

                        allow from all

    

    4.8.2 基於用戶的訪問控制機制

            認證方式有2種:basic 明文,digest消息摘要認證

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

                    認證的原因;

            虛擬賬號:僅用於訪問某服務時用到的行號和密碼

            存儲於何處(httpd要有相應的適配模塊):

                文本文件;sql數據庫;ldap目錄存儲

            

            basic基於用戶認證配置示例:

                (1) 定義安全域

                <Directory "/data/web/admin">            
                Options None
                AllowOverride None
                AuthType Basic
                AuthName "SOME_STRING_HERE"
                AuthName "For Administrators"
                AuthUserFile  "/PATH/TO/HTTPD_USER_PASSWD_FILE"
                AuthUserFile  "/etc/httpd/conf/.htpasswd"
                Require  user  username1  username2 ...
                </Directory>

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

                    Require  valid-user

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

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

    htpasswd  [options]   /PATH/TO/HTTPD_PASSWD_FILE  username 

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

                        -m:md5格式加密

                        -s: sha格式加密

                        -D:刪除指定用戶

                    # htpasswd -c -m /etc/httpd/conf/.htpasswd jerry

                    # htpasswd  -m /etc/httpd/conf/.htpasswd tom

            

            basic基於組賬號認證配置示例: 

                (1)定義安全域             

                <Directory "">            
                Options None
                AllowOverride None
                AuthType Basic
                AuthName "String“
                AuthUserFile  "/PATH/TO/HTTPD_USER_PASSWD_FILE"
                AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE"
                Require  group  grpname1  grpname2 ...
                </Directory>

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

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

        GRP_NAME: username1  username2  ...

                

    4.9 定義站點默認主頁

           DirectoryIndex  index.html  index.html.var 

         

    4.10 定義路徑別名

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

           alias 指定的URL右側的“/” 相當於後面的路徑右側的“/”

               

           DocumentRoot "/data/vhosts1"    

                http://www.magedu.com/images/logo.png

    /data/vhosts1/images/logo.png

           Alias  /images/  "/tmp/pub/"

                http://www.magedu.com/images/logo.png

                    /tmp/pub/logo.png

    4.11 設定默認字符集

         AddDefaultCharset  UTF-8

         中文字符集:GBK, GB2312, GB18030

    4.12 日誌設定

         日誌類型:訪問日誌 和錯誤日誌 

         錯誤日誌:

            ErrorLog  logs/error_log

            LogLevel  warn

    Possible values include: debug, info, notice, warn, error, crit, alert, emerg.

        訪問日誌:

          LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

          LogFormat:定義日誌信息格式

          CustomLog:指明日誌文件路徑及日誌格式

          LogFormat format strings:       

            %h:遠程主機,客戶端IP地址;    
            %l:Remote User, 通常爲一個減號(“-”);
            %u:Remote user (from auth; may be bogus if return status (%s) is 401);
                非爲登錄訪問時,其爲一個減號;
            %t:服務器收到請求時的時間;
            %r:First line of request,
                即表示請求報文的首行;記錄了此次請求的“方法”,“URL”以及協議版本;
            %>s:響應狀態碼;
            %b:響應報文的大小,單位是字節;不包括響應報文的http首部;
            %{Referer}i:請求報文中首部“referer”的值;
                         即從哪個頁面中的超鏈接跳轉至當前頁面的;
            %{User-Agent}i:請求報文中首部“User-Agent”的值;即發出請求的應用程序;

       4.13 虛擬主機配置

             站點標識:socket

                 ip相同,但是端口不同

                 ip不同,但是端口默認端口

                 FQDN不同:

                    請求報文首部

             虛擬主機有三種實現方案:  

                 基於ip:爲每個虛擬主機準備至少一個獨有ip地址;

 基於port:爲每個虛擬主機使用至少一個獨有的port;

                 基於FQDN:爲每個虛擬主機使用至少一個FQDN;

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

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

             

            虛擬主機的配置方法:              

            <VirtualHost  IP:PORT>            
                ServerName FQDN
                DocumentRoot  ""
            </VirtualHost>
            其它可用指令:
                ServerAlias:虛擬主機的別名;可多次使用;
                ErrorLog:
                CustomLog:
                <Directory ""> 可設置訪問控制
                ...
                </Directory>
                Alias
                ...


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