http

HTTP

web概述

Web是一種超文本信息系統,它的主要概念是超文本鏈接,它使得文本不會再像一本書一樣固定、線性的,而是從可以從一個位置跳到另外一個位置,正是由於可以實現這種多連接性我們才把它稱爲web

Web服務

Web服務通常可以分爲靜態Web服務與動態Web服務兩種

一、靜動之分

1、靜態Web服務是指採用靜態網頁對Web請求給予響應的一種方式

靜態Web服務最直觀的表現是,網站的Web的頁面只能格式化顯示電子文本,一經生成,無法改變其內容,只能更改網頁文件,這樣給網站的維護帶來了極大不便。到了後來也就出現動態網頁。

2、所謂的動態Web服務,是指跟靜態Web服務相對的一種網頁編程技術。相對靜態網頁而言,頁面代碼雖然沒有變,但是顯示的內容卻是可以隨着時間、環境或者數據庫操作的結果而發生改變的。不要將動態網頁和頁面內容是否有動感混爲一談。這裏說的動態網頁,與網頁上的各種動畫、滾動字幕等視覺上的動態效果沒有直接關係,動態網頁也可以是純文字內容的,也可以是包含各種動畫的內容,這些只是網頁具體內容的表現形式,無論網頁是否具有動態效果,只要是採用了動態網站技術生成的網頁都可以稱爲動態網頁。

而請求Web服務響應的對象,則稱爲客戶端,在Web客戶端不斷的增強其信息展現能力和客戶交互能力的同時,Web服務也悄悄的由靜態向動態逐步發展,不斷完善着。但最早的Web服務器只能響應Web客戶端發送的HTTP請求,並將存儲在Web服務器上的文件返回。如果要是能夠根據客戶的不同請求來動態的創建HTML文件,是不是會更好?基於這樣的理論也就產生了CGI(Common Gate Interface,通用網關接口)技術。

二、CGI技術

CGI是用於連接網頁和應用程序的接口,通過CGI的技術,可以實現在Web服務端進行數據庫查詢等複雜操作,並對其進行一系列操作後的數據進行封裝,動態產生HTML文件響應給客戶端,這爲客戶端和服務器端間交互動態信息起了傳輸紐帶的作用。

wKioL1PnKFzxMjpwAAMe9GZGX4M232.jpg

三、HTTP協議

HTTP(HyperText Transfer Protocol,超文本傳輸協議)是分佈式的Web應用的核心技術協議,該協議基於請求/響應模式,無狀態,在TCP/IP協議棧中屬於應用層,之所以說HTTP是無狀態協議,是因爲此協議一次請求和響應構成一個獨立的事務,各事務間沒有狀態的聯繫。

1、客戶端訪問Web服務器的幾個階段

建立請求

   客戶端(瀏覽器)使用HTTP命令(GET或POST方法)向服務器發出Web請求。(在此處需要DNS能夠解析到服務器的IP地址後,通知到客戶端才能知道服務器在那裏)

接收連接

  服務器端接收到請求後,服務器響應該請求,並在客戶和服務器之間建立連接。

處理請求

   Web服務器查找客戶端所請求的資源,有兩種結果:其一,資源不存在,則服務器發送一個相應的錯誤提示文檔給客戶端。

訪問資源

   其二,如果Web服務器查找到所需要的資源。

構建響應

   則會將所請求的資源進行整合,並封裝。

發送響應

   由服務器端發送響應到客戶端

記錄日誌

       服務器端將資源傳輸到客戶端後,會將事務日誌處理過程記錄到日誌之中。

當客戶端瀏覽資源成功後,便會與服務器斷來連接。

三、HTTP各種特性

 

1、持久連接

    KeepAliva {on|off}

    MaxkeepAliveRequests 100

KeepAliveTimeout 15

   

2MPM參數:preforkworkerevent

   <Ifmodule prefork.c>

   StartServers     8  啓動多少個進程

      MinSpareServer   5  最小空閒進程

   MaxSpareServer   20 最大空閒進程

   ServerLimit               256最多多少進程

   Maxclients               256最多客戶端數量

   MaxrepuestsPerChild   4000  每個進程允許在其生命裏處理多少個請求

  </IfModule>

3、指定監聽的地址和端口

    Listen [IP:] PORT

   此指令可以重複指定多次:

4DSO機制裝載的模塊

    顯示:

         httpd -D DUMP_MODULES

         loadModule Module_Name/path/to/module_file

5、指定站點根目錄      

      DocumentRoot ”/path/to/somewhere“

6、站點路徑訪問控制

         基於本地文件系統路徑:

      <Directory ”/path/to/somewhere“>

 

      </Directory>

         基於URL訪問路徑做訪問控制:

       <Location "/path/to/URL"

       </location>

7、於dirctory中可用的訪問控制

1Option

   Indexes:當訪問的路徑下無默認主頁面時,將所有資源以列表的形式呈現給用戶非常危險,慎用

                 FollowSymlinks:跟蹤符號鏈接和Indexes一樣

          

2 AllowOverride

   支持在每個頁面下創建.htaccess用於實現對此目中資源訪問時的訪問控制功能。

         

8、基於IP做訪問控制

        Order allowdeny

        Allow from all

                 deny在前做白名單

                 allow在前做黑名單

         rom後面能接受的地址格式:

           Ip,Network Address

           網絡地址格式較爲靈活:

             172.16

             172.16.0.0

             172.16.0.0/16

             172.16.0.0/255.255.0.0

 

9、定義默認的主頁面

       DirectoryIndex

     越優先的越寫在前面

 

10、配置日誌功能

 Errorlog  /path.to.error_log       錯誤日誌

 loglevel {dedug|info|notice|warn|error|crit|alert|emerg}          日誌級別

 logformat

customlog "/path/to/access_log"logformat_Name

 

       

    %h;客戶端地址

    %l:遠程登錄名,通常爲-

    %u:認證時輸入用戶名,沒有認證時間爲-

    %t:服務器收到用戶請求時間

    %r:請求報名的起始行

    %>s:響應狀態碼

    %b:響應報文的長度,單位是字節

    %{HEADER_NAME}i:記錄指定首部對應的值

11、路徑別名

    實現URL路徑的映射,從而所訪問的資源不再依賴於站點根目錄

      Alias /URL/ ”/path/to/somewhere“

 

12、設定默認字符集

    字符集:GB2312GB18030GBK

     

    adddefaultcharset

 

13CGI腳本

    CGI腳本路徑別名

    /var/www/cgi-bin/

        httpd://server/cgi-bin/

        bash腳本寫CGI

          所有文本都使用命令輸出:echoprintfcat

          執行程序:命令引用

       fastCGI:協議

 

14、基於用戶做訪問控制

    用戶認證:

             基本認證:基於明文發送:basic

             摘要認證:digest

   虛擬用戶:不是用於登陸操作系統用戶,僅用於訪問某服務或獲取某資源的憑證

             文本文件:.htpasswd

             存放賬號密碼的地方:

             SQL數據庫

                       dbm:基於文本文件存放的數據庫引擎,提供API

                       ldap:輕量級目錄訪問協議

 

authentication provider:賬號和密碼的存儲機制

                       authn    

                     authorizetionprovider :授權

                      案例:基於文件做訪問控制

        1)基於用戶進行認證

wKiom1PnJ2-jnZ3aAAECDU7D1xk762.jpg

       2)創建認證文件

 Htpasswd

-c:此文件事先不存在,則創建,注意,只能在創建第一個用戶時使用

 -m:以md5的格式存儲用戶的密碼信息

-D:刪除指定用戶

 

      3)組認證

              先創建用戶,在創建組

wKioL1PnKKiwkwwAAADRUFxpxBM732.jpg

15、虛擬主機

      虛擬主機:使用不同的訪問路徑

           基於端口

           基於IP

           基於主機名

         

      1)使用虛擬主機前提,要取消主服務器

           註釋主服務器的站點根路徑指定:Documentroot

          

      2)定義虛擬主機

           NameVirtualhost IP:PORT2.2纔有2.4沒有)

           NameVirtualhost *:PORT(監聽所有)

           <Virtualhost IP:PORT>

               ServerName

               DocumentRoot

               ServerAlias

               ErrorLog

               CustomLog

           </Virtualhost>

 

        配置文件語法檢查:

           httpd  -t

           service httpd configtext

          

           

測試:elinks 文本遊覽器

      -dump:獲取到頁面數據後直接退出進程

 

 

16https協議

     ssl(安全的套接字層),tls(傳輸層安全)

     http:基於文本編碼(明文)

 

        驗證:使用telnet發請求(http截圖)

        http協議:文本編碼

 

                 驗正:使用telnet發請求

 

                 # telnet 172.16.249.53 80

                 Trying 172.16.249.53...

                 Connected to 172.16.249.53

                 Escape character is '^]'.

                 GET /index.html HTTP/1.0

                 Host: www.b.org

 

                 HTTP/1.1 200 OK

                 Date: Fri, 08 Aug 2014 03:03:51GMT

                 Server: Apache/2.2.15 (CentOS)

                 Last-Modified: Fri, 08 Aug 201402:14:52 GMT

                 ETag:"e0009-12-50014c53e753f"

                 Accept-Ranges: bytes

                 Content-Length: 18

                 Connection: close

                 Content-Type: text/html;charset=UTF-8

 

                 <h1> Host B </h1>

                 Connection closed by foreignhost.   

 

httpdssl

       ssl模塊

       單獨成包

 

 ssl會話基於Ip地址創建,所有,每一個IP僅創建一個ssl會話

 

 ssl握手要完成的工作

     交換協議版本號

     選擇雙方都支持的加密方式

     客戶端對服務器端實現身份驗證

            密鑰交換

            

            https協議:基於SSL二進制編碼,443/tcp

                     openssls_client

                    

 客戶端驗證服務器端證書:

     有效期檢測:證書是否仍然在有限期內

     CA的有效性檢測:是否能解密

     證書籤名檢測:

     持有者的分支檢測:

    

配置httpd工作於https模型:

    1、安裝mod_ssl模塊

        yum install mod_ssl

       

    2、爲服務器生成私鑰,併爲其提供證書

         mkdir /etc/httpd/ssl

            

    3、配置實用https的虛擬主機

    4、重新裝載配置

    5、測試

      openssl s_client -connect IPPORT -cafile /path/to/ca_certificate

 配置httpd工作於https

           (1) 安裝mod_ssl模塊

           # yum install mod_ssl

 

           (2) 爲服務端生成私鑰,併爲其提供證書;

           # mkdir /etc/httpd/ssl && cd/etc/httpd/ssl

           # (umask 077; openssl genrsa -outhttpd.key 1024)

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

 

           簽署後的證書爲:/etc/httpd/ssl/httpd.crt

 

           (3) 配置使用https的虛擬主機;

           SSLCertificateFile

           SSLCertificateKeyFile

 

           <VirtualHost IP:443>

                 DocumentRoot

                 ServerName

           </VirtualHost>

 

           (4) 重新裝載配置

 

           (5) 測試

           # openssl s_client -connect IP:PORT-CAfile /path/to/ca_certificate

17status頁面

      httpd內嵌有handler(處理器),其中有一個handler用於輸出當前httpd服務相關狀態信息

 

       handlerserver-status

       啓用handler要使用sethandler指令

      

          handler:當文件被調用時,apache內部的表示形式:一般每種文件類型都有隱時處理器

 

         

 18、訪問屬性配置總結

     配置文件系統訪問路徑

           <directory [~]"">

           

           </directory>

           

           <file [~]"">

           

           </file>

           

           配置URL訪問路徑:

       <location [~]"">

       </location>

      

       <locationmatch "">

       </locationmatch>

 

   

 19curl命令

    -A/--user-agen<string> 設置用戶代理髮送給服務器

       -e/--referer

        -I

     

curl命令

 

      curl是基於URL語法在命令行方式下工作的文件傳輸工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET,DICT, FILELDAP等協議。curl支持HTTPS認證,並且支持HTTPPOSTPUT等方法, FTP上傳, kerberos認證,HTTP上傳,代理服務器, cookies用戶名/密碼認證,下載文件斷點續傳,上載文件斷點續傳,http代理服務器管道( proxy tunneling),甚至它還支持IPv6 socks5代理服務器,,通過http代理服務器上傳文件到FTP服務器等等,功能十分強大。

 

      curl的常用選項:

 

         -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[:password]>設置服務器的用戶和密碼

         -0/--http1.0 使用HTTP 1.0

     

      20、使用mod_deflate模塊壓縮頁面優化傳輸速度

     

   SetOutputFilter DEFLATE

 

      # mod_deflate configuration

     

           # Restrict compression to these MIMEtypes

           AddOutputFilterByType DEFLATEtext/plain

           AddOutputFilterByType DEFLATEtext/html

           AddOutputFilterByType DEFLATEapplication/xhtml+xml

           AddOutputFilterByType DEFLATEtext/xml

           AddOutputFilterByType DEFLATEapplication/xml

           AddOutputFilterByType DEFLATEapplication/x-javascript

           AddOutputFilterByType DEFLATEtext/javascript

           AddOutputFilterByType DEFLATEtext/css

       

           # Level of compression (Highest 9 -Lowest 1)

           DeflateCompressionLevel 9

            

           # Netscape 4.x has some problems.

           BrowserMatch ^Mozilla/4gzip-only-text/html

            

           # Netscape 4.06-4.08 have some moreproblems

           BrowserMatch ^Mozilla/4\.0[678]no-gzip

            

           # MSIE masquerades as Netscape, butit is fine

           BrowserMatch \bMSI[E] !no-gzip!gzip-only-text/html

     

     

21httpd程序包自帶的工具介紹  

       

        httpd

           Apache服務器程序

           

           -t:測試配置文件

           -l:列表靜態模塊

           -D DUMP_MODULES:列出DSO模塊

           -M:相當於-t

       

         htpasswd

            爲基於文件的basic認證創建和更新用戶認證文件

    

         apachectl

            腳本,httpd服務器控制工具:Apache自帶 

 

      abApache benchmark

        httpd的基準性能測試工具

       

      apxs

        httpd得以擴展使用第三方模塊的工具

 

      htcacheclean   

        磁盤緩存清理工具

 

     htdigest

        digest認證創建和更新用戶認證文件

 

     httxt2dbm

        rewrite map創建dbm格式的文件

       

     rotatelogs

        不關閉httpd而切換其使用的日誌文件工具

       

     suexec

        User apache

        Group apache

       

        httpd進程需要以另外的用戶的身份去訪問某些資源時,可以以suexex作臨時切換

       

22ab工具的初步使用

   

    同類工具:http_loadwebbenchseigeTCPcopy

 

    Usageab [options] [http[s]://]hostname[:port]/path

        -c #:模擬的併發數

        -n #:總的請求數

        -n的值一定要大於等於-c的值

         

 

23、資源限定:(# 代表數字)

      ulimit

       軟限定:

         可臨時超出一定時長的上限

       硬限定:

         絕對不能超出的上限

 

        管理員可使用ulimit命令臨時性的修改各自資源的軟限制:

           ulimit -n # :能同時打開的文件數

                  -u # :能同時啓動的進程數

                 

        永久修改此限定需要修改配置文件:

             /etc/security/limits.conf

             /etc/security/limits/*.conf

            

24、編譯安裝httpd-2.4

     httpd-2.0       

     httpd-2.4       C7

     httpd-2.2       C6

 

      httpd程序依賴於aprapr-util                                  

               aprapache portable runtime     

                                            

      httpd-2.4的新特性:

        1MPM支持在運行時裝載:

--enable-mpms-shared=all--with-mpm={prefork|worker|event}

            2、支持event mpm

            3、異步讀寫

            4、支持在每模塊及每目錄上分別使用不同的日誌級別

          5、每請求的配置:<If><Elseif>

            6、增強版的表示式分析器

            7、支持毫秒級的keep alive的超時時間timeout

            8、支持基於FQDN的虛擬主機不在需要NameVirtuahome

          9、支持用戶自定義變量                              

                                                 

   新增了一些模塊:

             mod_proxy_fcgi,mode_reateinit,mod_request,mod_remoteip

             

   修改了一些配置機制:

             不再支持使用orderallowdeny定義基於ip的訪問控制:改爲require

 

    基於IP做訪問控制:

         允許所有主機訪問:Require all granted

         拒絕所有主機訪問:Require all deny

        

    控制某特定主機的訪問:

         require ip IPADDR

         require not IPADDR

        

         IPADDR:

            單個ip

             network/Netmask

             network/length172.16.0.0/16

             net172.16

            

        require host HOSTNAME

        require not HOSTNAME

       

             HOSTNAME

                FQDN:具體主機

                DOMAIN:域內的所有主機


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