淺談HTTP協議以及httpd的十八般武藝

  初識HTTP協議    


 

         HTTPhyper text transfer protocal)作為互聯網應用最廣泛的協議,任何一個運維人員都無法回避它,HTTP的目的就是提供一種發布和接收html頁面的方法,為了更好的理解HTTP協議,首先需要了解幾個常識:

         1URLUniform Resource Locator)統一資源定位符,用于描述某個服務器上某個特定資源的位置,也就是通常我們見到的網址。

         2HTMLHyper Text Markup Language)超文本標記語言,HTML 語言是為了能把存放在一臺電腦中的文本或圖形與另一臺電腦中的文本或圖形方便地聯系在一起,形成有機的整體,人們不用考慮具體信息是在當前電腦上還是在網絡的其它電腦上。這樣,你只要使用鼠標在某一文檔中點取一個圖標,Internet就會馬上轉到與此圖標相關的內容上去。

         3、TCPTransmission Control Protocol)傳輸控制協議,是面向連接的協議,也就是說通訊前要建立虛擬鏈接,而HTTP的協議就是通過TCP來實現的。

        HTTP的工作機制:就是基于B/S(瀏覽器/服務器)架構,由瀏覽器(即客戶端)發起http請求—->服務器響應http請求。

    一次完整的http請求過程如下

繪圖1.jpg


 常見的HTTP服務器程序以及應用程序服務器


 

       常見的http服務器程序:

       httpd(apache)

       nginx

       lighthttpd

       常見的應用程序服務器:

        IIS(microsoft)

        tomcat

        jetty

        jboss

        weblogic

        webshpere(IBM)

 

httpd的功能特性


        httpd主要有以下特性

            高度模塊化:core + modules
            DSO: Dynamic Shared Object,動態共享庫
            MPM:Multipath Processing Modules,多道處理模塊
                 prefork:多進程模型,每個進程響應一個請求;一個主進程:負責生成n個子進程,子進程也稱為工作進程,每個子 進程處理一個用戶請求;即便沒有用戶請求,也會預先生成多個空閑進程,隨時等待請求到達;最大不會超過1024個;
                 worker:多線程模型,每個線程響應一個請求; 一個主進程:生成多個子進程,每個子進程負責生個多個線程,每個線程響應一個請求;
                 event:事件驅動模型,每個線程響應n個請求; 一個主進程:生成m個子進程,每個進程直接n個請求;
  

        同時支持以下功能

       1、虛擬主機
       2、 IP、Port、FQDN
       3、CGI:Common Gateway Interface,通用網關接口;
       4、 反向代理
       5、 負載均衡
       6、路徑別名
       7、豐富的用戶認證機制
       8、basic
       9、 digest
      10、支持第三方模塊

 

httpd的安裝與配置


       yum安裝httpd

yum install -y httpd
service httpd start

   yum安裝的httpd的默認工作目錄(根目錄):/etc/httpd

 
   配置文件:
       主配置文件:/etc/httpd/conf/httpd.conf
       分段配置文件:/etc/httpd/conf.d/*.conf
   服務腳本:/etc/rc.d/init.d/httpd
   腳本的配置文件:/etc/sysconfig/httpd
   模塊文件目錄:/etc/
httpd/modules –> /usr/lib64/httpd/modules
   主程序文件:/usr/sbin/httpd (prefork)
               /usr/sbin/httpd.worker (worker)
               /usr/sbin/httpd.event (event)
   日志文
件目錄:/var/log/httpd
                access_log: 訪問日志文件
                error_log: 錯誤日志
   站點文檔目錄:/var/www/html

 

httpd的十八般武藝


 1、指定監聽端口

Listen 80

        (1) IP省略時表示監聽本機上所有可用的IP地址;
        (2) Listen指令可以出現多次,用于指明多個不同的監聽端口或套接字

2、持久連接的相關配置

KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15

        持久連接:連接建立后,每個資源獲取結束不會斷開連接而是繼續等待其他資源的請求并完成傳輸

        非持久連接:每個資源都是單獨通過專用的連接進行獲取的

3、并發請求模式的不同實現

         httpd-2.2 不支持同時編譯多個不同的MPM,rpm安裝的httpd-2.2提供了三個文件分別用于實現提供對不同的MPM的支持;確認方法:

ps aux | grep httpd

         默認為/usr/sbin/httpd,其為prefork; 
         查看模塊列表:

httpd -l        #查看靜態編譯的模塊
httpd -M        #查看所有模塊,包括靜態編譯和DSO模塊

4、DSO動態裝卸載模塊的實現

# The following modules are not loaded by default:
#LoadModule asis_module modules/mod_asis.so
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
#LoadModule cern_meta_module modules/mod_cern_meta.so
#LoadModule cgid_module modules/mod_cgid.so
#LoadModule dbd_module modules/mod_dbd.so
#LoadModule dumpio_module modules/mod_dumpio.so
#LoadModule filter_module modules/mod_filter.so
#LoadModule ident_module modules/mod_ident.so
#LoadModule log_forensic_module modules/mod_log_forensic.so
#LoadModule unique_id_module modules/mod_unique_id.so

        要想啟用httpd的摸個模塊只需要將前面的#號去掉即可,是不是很方便

5、定義“main server”的文檔頁面路徑

        文檔路徑映射:
            DocumentRoot指向的路徑為URL起始的位置:/var/www/html/

6、站點訪問控制

        訪問控制機制:
            1、基于來源地址
            2、基于賬號

7、Directory中的訪問控制定義

        1、 Options
                Indexes: 當訪問的路徑下無默認主頁面文件存在,且沒有指定具體要訪問的資源時,會將此路徑下的所有資源以列表呈現給用戶;非常危險,不建議使用;
                FollowSymLinks:如果某頁面文件是為指向DocumentRoot之外路徑上的其它文件時,將直接顯示目標文件的內容;
                None: none
               All: 所有的都啟用;

        2、 基于來源地址訪問控制
                Order: 檢查次序
                Order Allow Deny:只有明確Allow的來源地址,才允許訪問,其它的均為Deny
                Order Deny Allow:
                Allow from:允許訪問的來源地址
                Deny from:拒絕訪問的來源地址

8、定義默認主頁面

DirectoryIndex index.html index.php

        自左向右,查找首次匹配到的文件就將其作為主頁面

9、配置日志

        錯誤日志:
            ErrorLog logs/error_log
            LogLevel warn

       訪問日志:要定義日志格式
            LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
            CustomLog logs/access_log combined

            %h: Remote host,客戶端主機
            %l: Remote logname (from identd, if supplied). 客戶用戶通過identd登錄時使用名稱;一般為-;
            %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: Size of response in bytes, excluding HTTP headers,響應報文的大小,單位為字節;不包含首部信息;
            %{Referer}i:記錄Http首部Referer對應的值;即訪問入口,從哪個頁面跳轉至此頁面;
            %{User-Agent}i:記錄http首部User-Agent對應的值;即瀏覽器類型;

10、路徑別名

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

11、設定默認字符集

AddDefaultCharset UTF-8        #常用的字符集:GBK GB2312 GB18030

12、基于用戶的訪問控制

        http協議支持的認證方式:
            basic:基本BASE64basic,認證機制的實現

            1、定義安全域

<Directory "/data/web/html/employee">
         Options None
         AllowOverride None
         AuthType Basic
         AuthName "Employee Infomation, only for employee"
         AuthUserFile /etc/httpd/users/.htpasswd
         Require user tom jerry
</Directory>

            2、提供用戶的帳號文件

                    htpasswd [ -c ] [ -m ] [ -D ] passwdfile username
                       -c: 添加第一用戶時創建此文件;
                       -m: 以md5格式加密用戶密碼存放;
                       -s: 以sha格式加密用戶密碼存放;
                       -D:刪除指定用戶

            3、組認證

<Directory "/data/web/html/employee">
         Options None
         AllowOverride None
         AuthType Basic
         AuthName "Employee Infomation, only for employee"
         AuthUserFile /etc/httpd/users/.htpasswd
         AuthGroupFile /etc/httpd/users/.htgroup
         Require group GRP1 GRP2 ...
</Directory>

    

13、虛擬主機的三種實現方式

        httpd三種類型的虛擬主機:
                基于IP
                基于Port
                基于FQDN

        定義虛擬主機的方法:

<VirtualHost "IP:PORT">
     ServerName 
     ServerAlias
     DocumentRoot
</VirtualHost>

14、內置的status頁面

<Location /server-status>
       SetHandler server-status
       Order deny,allow
       Deny from all
       Allow from 172.16.0.0/16
</Location>

15、使用mod_deflate模塊壓縮頁面優化帶寬

           適用場景:
                1、節約帶寬,額外消耗CPU;同時,可能有些較老瀏覽器不支持;
                2、壓縮適于壓縮的資源,例如文件文件;

SetOutputFilter DEFLATE
   # mod_deflate configuration
   # Restrict compression to these MIME types
   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
   # Level of compression (Highest 9 - Lowest 1)
   DeflateCompressionLevel 9    
   # Netscape 4.x has some problems.
   BrowserMatch ^Mozilla/4 gzip-only-text/html 
   # Netscape 4.06-4.08 have some more problems
   BrowserMatch ^Mozilla/4\.0[678] no-gzip
   # MSIE masquerades as Netscape, but it is fine
   BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

16、https的實現方法

         配置httpd支持https:
            1 、為服務器申請數字證書;
                  (a) 創建私有CA

                            生成私鑰文件

openssl genrsa -out private/cakey.pem 2048

                            生成自簽證書

spenssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 10000

                            提供輔助文件

touch index.txt
echo 01 > /etc/pki/CA/serial

                   (b) 在服務器創建證書簽署請求

                            生成私鑰在/etc/httpd/ssl/

(umask 077 openssl genrsa -out httpd.key)

                            生成證書簽署請求

openssl -req -new -key httpd.key -out httpd.csr

                  (c) CA簽證

                            獲取證書簽署請求

                            簽證證書

openssl ca -in httpd.csr -out -days 3665

            2、 配置httpd支持使用ssl,及使用的證書;

yum -y install mod_ssl

             配置文件:/etc/httpd/conf.d/ssl.conf

DocumentRoot
ServerName
SSLCertificateFile
SSLCertificateKeyFile

            3、測試基于https訪問相應的主機;

17、httpd自帶的工具程序

            htpasswd: basic認證基于文件實現時,用到的賬號密碼文件生成工具;
           apachectl:httpd自帶的服務控制腳本,支持start, stop;
           apxs:由httpd-devel包提供的,擴展httpd使用第三方模塊的工具;
           rotatelogs:日志滾動工具;
           suexec:訪問某些有特殊權限配置的資源時,臨時切換至指定用戶運行;

18、httpd壓力測試工具

           ab [OPTIONS] URL
                    -n: 總的請求數
                    -c:模擬的并發數
                    -k: 以持久連接模式測試

         以上就是httpd 的十八般武藝,或許你會覺得不以為然,但是別忘了,這些都是基本功,只有基本功扎實了,你的江湖路才能走的更加坦然。

     

原創文章,作者:zhang,如若轉載,請注明出處:http://www.www58058.com/10916

(0)
zhangzhang
上一篇 2016-02-14 09:42
下一篇 2016-02-14 09:44

相關推薦

  • CentOS7 Local yum的一次報錯信息

    說明:今天在火車上測試一個CentOS7下的一個服務,要用到yum配置,但是本機沒有聯網,所以考慮到配置本地yum,按照之前CentOS6下的常規方法,居然發現有報錯。 操作如下: 1)虛擬機下將CentOS7光盤加載到系統里面,然后掛載到本地的/localyum上 [root@localhost yum.repos.d]# mount&…

    Linux干貨 2016-07-16
  • nmcli命令使用,解析性能監控工具

    nmcli nmcli地址配置工具,NetworkManager client 網絡管理客戶端 相關命令:nmcli connection show        查看當前連接狀態 nmcli connection reload      重啟服務 nmcli connection sho…

    Linux干貨 2016-09-07
  • Linux系統命令使用格式已經如何查看幫助

    在Linux 系統中有非常多的命令一般的命令格式:“COMMAND OPTIONS ARGUMENTS” 下面有一些基礎命令可以體驗下命令的基本格式用法 ifconfig命令    作用: 配置網絡接口,查看網絡接口信息    基本語法:     ifconfig  […

    Linux干貨 2016-08-15
  • FTP部署及簡單應用

    文件服務: ftp:應用層,C/S,文件共享;file transfer protocol; nfs,cifs:文件系統接口,網絡文件系統;     nfs:network file system     cifs:common …

    Linux干貨 2016-10-19
  • 新手報到

    在開班的第一天為自己立下flag,看畢業時能否實現自己的預期。

    2018-03-26
  • N25_第一周博客作業

    一、計算機組成及其功能      1、CPU:          運算器:計算功能,對數據進行加工處理的部件。          控制器:負責從存儲器讀取指令,控制計算器之間的運行狀態和結果;     &nbs…

    Linux干貨 2016-12-04

評論列表(1條)

  • stanley
    stanley 2016-02-14 09:43

    現在研究基礎的人不多了,贊

欧美性久久久久