第七周LINUX學習筆記

来源:https://www.cnblogs.com/gohrx/archive/2019/04/14/10707135.html
-Advertisement-
Play Games

HTTP的基本操作 3月17資源子網和通信子網套接字:兩類 socket:IP port IP:port Ip.port unix sock:基於文件系統通信實現 BSD發明: MTU:最大傳輸單元傳輸層協議: 面向連接的:TCP 虛連接(95%) 無連接的:UDP套接字的類型: TCP套接字 UD ...


                          HTTP的基本操作

3月17
資源子網和通信子網
套接字:兩類
    socket:IP port
            IP:port
            Ip.port

    unix sock:基於文件系統通信實現

    BSD發明:
    MTU:最大傳輸單元

傳輸層協議:
    面向連接的:TCP
        虛連接(95%)
    無連接的:UDP

套接字的類型:
    TCP套接字
    UDP套接字
    raw套接字(由程式自身維護)

物理層=硬體
數據鏈路層=驅動

通信:點對點
      c/s(client/server)

客戶端的為隨機埠

c/s:
   通信子網:只負責傳輸,內容是什麼不管
,   應用層協議:特定的
      http,https,smtp,pop,imap,ftp,ldap

http 超文本傳輸協議(hyprttext transport protcol)
   html:hypertext mark language(超文本標記語言)

   client:browser
     URI(統一資源提示符)的子集:URL(統一資源定位符)
   server:http server

GUI
CLI

html格式的文件
  <html>
     <head>
        <title></title>
     </head>
     <boby>
          <h1></h1>
            <p><img src=""></p>
           <h2></h2>
            <p>  <a href="a.html" > </a>  </p>
     </body>
   </html>


css: Cascading style sheet(層疊樣式表)

動態頁面:
    程式腳本
        客戶端
        伺服器端 CGI(common gateway interface程式通用介面)
          c,c++
          perl
          python
          php
          asp.net
          jsp

一個頁面中可能會包含多個頁面對象

URI:Uniform Resource Identifier
URL: Uniform Resource Locator

方案:主機地址:資源

http協議的版本:
    http0.9:只能傳輸html文檔,1991年
    http1.0:支持多媒體數據的處理,保持連接。有緩存功能
    http1.1:支持更多的請求方法,更加精細的緩存控制,持久連接

MIME:multipurpose Internet mail extension 互聯網多用戶郵件擴展
  nase64:將二進位數據編碼成文本發送,並能夠讓接受方還原回原來的格式

HTTP報文:

   HTTP事務:一次請求以與其對應的響應
   HTTP方法:GET、PUT、HEAD、POST、DELETE
   HTTP請求:request
       HTTP請求報文
          報文格式:
            <method><request-url><version>
            <headers>首部
            <entity-body>
          首部:
             name:value
             content-type:images/gif

             分三類:
                通用首部
                請求首部
                響應首部

   HTTP響應:response
       HTTP響應報文
       報文格式:
          <version><status><reason-phrase>
          <headers>
          <entity-body>

        <method>:請求方法,希望伺服器端執行的動作,如GET、HEAD、POST等
        <request-url>:請求的資源,可以是相對路徑,也可以是完整的URL
        <version>:協議版本,格式HTTP/,如http/1.0
        <major>。<minor>多媒體主類型/從類型
        <headers>:HTTP首部
        <status>:狀態碼
        <reason-phrase>:原因短語,數字狀態嗎易讀信息
        <entity-body>:主體部分

        http協議:是一種stateless(無狀態)協議,
             一次HTTP事務結束後,鏈接即行斷開,例如一次請求需要TCP的三次握手,然後請求到一個文件後斷開。那麼如果有100個文件。就需要執行100次這樣的過程。

             加速方式:
                 並行請求:即利用多線程。第一次連接是直接反問,後續才用並行
                 持久連接:保持TCP的連接。
伺服器的連接是有限的,連接用戶達到閾值時,後續用戶就得排隊。所以持久連接也需要斷開。斷開的方式:給予請求文件最大的數量和請求持續的時間。哪個超過或達到要求了便斷開。而例如設置時間為10S 那麼對於一個繁忙的伺服器來講,後續的用戶便需要等待10S。所以是否持久,如何選擇到一個最佳分配點,是運維時間分配的重要方向。



HTTP的請求方法:
      安全的方法:GET、HEAD
      POST、PUT、DELETE、OPTIONS、TRACE
      擴展方法:LOCK、MKCOL、COPY、MOVE

     GET:請求獲取一個資源,需要伺服器發送
     HEAD:跟GET相似,但其不需要服務發送資源而僅傳迴響應首部
     POST:支持HTML表單提交,表單中有用戶填入的數據,這些數據會發送到伺服器端,由伺服器存儲至某位置(例如發送處理程式)
     PUT:與GET相反,向服務寫入文檔;發佈系統
     DELETE:請求刪除URL指向的資源
     OPTIONS:探測伺服器端對某資源所支持的請求方法
     TRACE:追蹤請求資源要經過的防火牆、代理或網關等
 
    響應報文代碼
       1XX:信息性狀態碼
           100:
       2XX:成功狀態碼
           200:OK
           201:Created OK
       3XX:重定向狀態碼
           301:Moved Permanebtly 永久重定向,在響應報文中使用首部“Location:URL”指定資源現在所在的位置
           302:Found 臨時重定向,在響應報文中使用首部“Location:URL”指定臨時資源位置
           304:Not Modified,條件式請求中使用
       4XX:客戶端的錯誤
           403:Forbidden,請求被伺服器拒絕
           404:Not Found,伺服器無法找到請求的URL
           405:Method Not Allowed,不允許使用此方法請求響應的URL
       5XX:伺服器類的錯誤
           500:Internal Server Error,伺服器內部錯誤
           502:Bad Gateway:代理伺服器從上游收到一條偽響應
           503:Service Unavailable,伺服器此時無法提供服務,但將來可能可用

HTTP首部
    通用首部:請求和響應都可以使用的
    請求首部:
    響應首部:
    實體首部:用於指定實體屬性
    擴展首部:非標準首部,可能是由程式開發者創建的,例如X-Forward-For

 通用首部:
        Connection:定義C/S之間關於請求/響應的有關選項
             對於http/1.0,Connection keep-alibe
        Via:顯示了報文經過的中間節點
        Cache-Control:緩存指示
        Pragma

 請求首部:
       Cilent-IP:請求端IP
       Host:請求的主機名和埠號,虛擬主機環境下用於不同的虛擬主機
       Referer:指明瞭請求當前資源的原始資源的URL
       User-Agent:用戶代理,使用什麼工具發出的請求

       Accept首部:用戶標明客戶自己更傾向於支持使用的能力
           Accept:指明伺服器能發送的媒體類型
           Accept-Charset:支持使用的字元集
           Accept-Encoding:支持使用的編碼方式
           Accept-Language:支持使用語言

       條件請求首部:
           Expect:期望的行為
           If-Modified-Since:是否在指定的時間以來修改過此資源(一般用於詢問緩存是否修改過),沒有修改過發304
           If-None-Match

        跟安全相關的請求首部:
            Authorication:客戶端提交給服務端的認證數據,如賬號和密碼
            Cookie:客戶端發送給伺服器端身份標識
            Cookie2
    
 響應首部:
               Age:響應持續的時間
           Server:向客戶端標明伺服器程式名稱和版本

    協商首部:
          Accept-Ranges:對當前資源來講,伺服器所能夠接受的範圍類型
          Vary:首部列表,伺服器會根據列表中的內容挑選出最適合的版本發送給客戶端

    跟安全相關的響應首部
           Set-Cookie:伺服器端在某客戶端第一次請求時發給的令牌
           Set-Cookie2:
           WWW-Authenication:質詢,即要求客戶端提供賬號和密碼

實體首部:
     Location:資源的新位置
     Allow:允許對此資源使用的請求方法

     內容首部:
         Contern-Encoding
         Contern-Language
         Contern-Length
         Contern-type
         Contern-Range
         Contern-Location

     緩存首部:
       ETag:實體標簽
       Expires:過期標簽
       Last-Modified:上一次的修改時間

回顧:
    1.IPC(Inter Process Communication)進程通信
    同一主機進程
    信號、旗語、shm
    Unix Sock
    跨主機的進程
    rpc
    socket
緩存:內核所維護的記憶體空間
Client:
   GUI:
     IE、Fierfox、Safari、chrome、Opera
    CLI:
     elinks,curl

Server:
    靜態
    ASF:httpd
    Nginx
    lighttpd
    gws
   APP Server
    IIS
    tomcat
    jetty
    resin

 http:html
     http/1.0

一個Web請求的基本過程
   建立連接
   接收請求
   處理請求
   訪問資源
   構建響應
   發送響應
   記錄日誌

Web伺服器的輸入輸出結構
    單線程I/O結構
    多線程I/O結構 一個線程響應一個請求 與復用的I/O結構的區別是同一個文件需要被讀取多次,降低了記憶體使用率,但是即使一個線程奔潰,其他線程不受影響,安全性增加
    復用的I/O結構  單個線程響應多個請求,增加記憶體使用率, 但是不安全。
    復用多線程I/O結構:多個線程,每個線程響應多個請求 其實就是多個復用的I/O結構


sendfile:可以讓內核在取出請求的文件後直接調用系統功能加工成報文,發送給客戶端。這是一種優化機制,但是不能對過大的文件提供此服務



日誌寫入緩衝,再由緩衝寫入磁碟。緩衝有多大需要根據情況來調配。因為緩衝中的數據在電腦突然崩潰時就會被清除。

httpd:俗稱apache
  a pachey server=apache

  www.netcraft.com


httpd:高度模塊化
   core+modules
   DSO:Dynamic Shared Object 動態模塊對象
   MPM:Multipath Processing Module
     多道處理模塊,非一個模塊,而是對一種特性的稱謂
       prefork:一個進程一個請求(預先創建好),有最小空閑進程數和最大空閑進程數。select():1024 規定最多涌進來的請求數
          
       worker:一個進程多個線程,一個線程一個請求,與上述的prefork兩者性能其實不分伯仲,實際上並沒有改變一個線程一個請求的本質,但是節省了很多記憶體

實際上prefork和worker都是上述所說的結構中的多線程I/O結構

       event:一個線程響應多個請求,不生成進程
           event-driven:事件驅動,主要目的在於實現進程響應多個請求  屬於復用多線程I/O結構

上述幾種工作方式其實都是由一個主進程來創建子進程來實現,主進程也負責回收子進程

http版本
   http-1.3
   http-2.0
   http-2.2,不支持event
   http-2.4

httpd的功能特性:
   路徑別名:alias
   用戶認證:authentication
   虛擬主機:virtual host
   反向代理:
       負載均衡:
    用戶站點:
    CGI:Common Gateway Interface

安裝httpd
    yum -y install  httpd
    服務腳本:/etc/rc.d/init.d/httpd
       腳本配置文件:/etc/sysconfig/httpd
    運行目錄:/etc/httpd
    配置文件:
     主配置文件:/etc/httpd/conf/httpd.conf
         擴展配置:/etc/httpd/conf.d/*.conf  可以被主配置文件所調用
     Socket:80/tcp,443/tcp
     文檔根目錄:/var/www/html
         CGI:/var/www/cgi-bin/  能夠執行的動態腳本


日誌滾動:
    日誌切割
    時間、空間

Docroot:文檔根目錄   /var/www/html/

配置文件:
    /etc/httpd/conf/httpd.conf
       配置參數 值
           配置指令不區分字元大小寫
           值有可能區分大小寫
           有些指令可以重覆出現多次

       配置文件格式
            全局配置
            主機配置:用於僅提供一個站點時
            虛擬主機配置:用於提供多個站點時

        配置文件語法測試
            serviice httpd configtest
            httpd -t

        絕大多數配置修改後,可以用過service httpd reload 來生效,如果修改了監聽的地址或埠,必須重啟服務才能生效

1.監聽套接字
  Listen [IP:]port
    此指令可以出現多次,用於指定監聽多個不同的套接字
       Listen 80
       Listen 172.16.100.7:8080
2.配置使用Keepalive
   KeepAlive {On|Off}
   KeepAliveTimeout 2 超時時間
   MaxKeepAliveRequests 50 最大連接
3.MPM
   多道處理模塊
   httpd -l 查看編譯進內核的模塊
   想使用不同的機制,修改配置文件即可 /etc/syconfig/httpd文件
 <IfModule preforck.c>判斷模塊是否存在
    StartServers       8 預設啟動的工作進程數
    MinSpareServers    5 最少空閑進程數
    MaxSpareServers   20 最大空閑進程數
    ServerLimit      256 最大活動進程數
    MaxClients       256 最大併發連接數,最多允許發起的連接請求的個數
    MaxRequestsPerChild  4000 每個子進程在生命周期內最大允許服務的最多請求個數
  </IfModule>

    <IfModule worker.c>
    StartServers         4 啟動的子進程的個數
    MaxClients         300 最大併發連接數,最多允許發起的連接請求的個數
    MinSpareThreads     25 最少空閑線程數
    MaxSpareThreads     75 最大空閑線程數
    ThreadsPerChild     25 每個子進程生成的線程數
    MaxRequestsPerChild  0 每個子進程在聲明周期內最大允許服務的最多請求個數
    </IfModule>

4、DSO模塊的載入方式
   LoadModule module_name /path/to/module
      如果使用相對路徑,則對於ServerRoot所定義的位置而言
      LoadMoudule php5_module /usr/lib64/httpd/modules/php.so
      讓服務重載配置文件方能生效
   httpd -m 列出與載入到所有DSO模塊與非DOS模塊
    不想載入某個模塊的話,配置文件中註釋掉即可
5、配置站點根目錄
    DocumentRoot /path/to/somewhere

6、頁面訪問屬性
    <Direcotry "/path/to/somewhere">
       Options  選項
          Indexes:缺少指定的預設頁面時,允許將目錄中的所有文件已列表形式返回給用戶:危險:慎用
          FollowsymLinks:允許跟隨符號鏈接所指向的原始文件
          None:所有都不啟用
          All:所有的都啟用
          ExecCGI:允許使用mod_cgi模塊執行CGI腳本
          Includes:允許使用mod_include模塊實現伺服器端包含(SSI)
          IncludesNOEXEC:允許包含但不允許執行腳本
          MultiViews:允許使用mod_negotiation實現內容協商
          SymLinksIfOwnerMatch:在鏈接文件屬主屬組與原始文件的屬主屬組相同時,允許跟隨符號連接所指向的原始文件
       AllowOverride  用戶認證的配置
    </Direcotry>
     可以使用正則表達式,使用~
7.基於主機的訪問控制
   <Direcotry "/path/to/somewhere">
     Options
     AllowOverride
       None 不禁用下麵
     order 次序,寫在後面的為預設   即兩者都有或者兩者都沒有的情況下,以寫在後面的為預設
     
     Allow from
     Deny from
    </Direcotry>

   如果都匹配或都不匹配時以預設為準
   否則則以匹配到的為準
             Allow from
             Deny from
                IP,Network Address
                172.16
                172.16.0.0
                172.16.0.0/16
                172.16.0.0/255.255.0.0
基於用戶做訪問控制

8.定義預設主頁面
   DirectoryIndex index.html  123.html 。。。依次查找

9.用戶目錄
    如果期望讓每個用戶都可以創建個人站點:http://Server_IP/~Username/
    userdir disablied:禁止
    userdir public_html:
          public_html是用戶家目錄下的目錄名稱,所有位於此目錄中的文件均可通過前述的訪問路徑進行訪問
           用戶的家目錄得賦予進行httpd進程的用戶擁有執行許可權
       setfacl -m u:apache:x ~Username

10、配置日誌功能
   /var/log/http/
       access.log:訪問日誌,其需要記錄的內容需要自定義
       error.log
      
      訪問日誌:
        CustomLog "/path/to/log_file" LogFormat
        LogFormat定義日誌格式
        "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
        %h:客戶端地址
        %l:遠程的登錄名,通常為-
        %u:認證時的遠程用戶名,沒有認證時為-
        %t:接收到的請求時的時間,為標準英文格式時間+時區
        \" :轉義,顯示""
        %r:請求報文的起始行
        %>s:響應狀態碼,
        %b:以位元組響應報文的長度,不包含http報文
        %{Header_Name}i:記錄指定請求報文首部的內容(value)
        %u:請求的URL
        
     詳情請參考:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
        錯誤日誌:
         ErrorLog

11、路徑別名
   Alias /alias/ "/path/to/somewhere/"
    意味著訪問http://Server_IP/alias時,其頁面文件來自於/path/to/somewhere/中

12、指定預設的字元集
     AddDefaultCharset

                              HTTP基本操作丶編譯



MIME:多媒體類型
   major/minor
       HTML: text/html
       ASCII:text/plagin
       JPEG:image/jpeg
       GIF:image/gif
       QuickTime(流媒體):video/quicktime


13.腳本路徑別名(CGI介面)
   URL-->FileSystem Directory
   CGI:Common Gateway Interface(通用網關介面)使WEB伺服器可以跟一個應用程式進行通信,該應用程式將運行的結果返還給WEB伺服器。從通信環境中獲得結果。  如當你訪問一個腳本時,可能返回的只是腳本的文本內容,這時就需要伺服器利用CGI進行通信,讓shell解釋器將腳本運行的結果返還

    CGI是不安全的 所以現在極少被使用。取而代之的是php,python等腳本語言使用的 不同的介面
      在第一行寫入
      echo “Content-Type:text/html:
   mod_alias,mod_cgi
   ScriptAlias /URL/ "/path/to/somewhere" somewhere  例如配置時ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"   訪問時 http://IP/cgi-bin/文件名

CGI文件需要放在此目錄下才可以被執行
   也可以在目錄中實現

  腳本格式一般為
   cat << EOF
    Content-Type:text/html
    <pre>
    The time is : `date`.
    </pre>
    EOF

14.基於用戶的訪問控制
    虛擬用戶:不是系統用戶,只是為了獲取某種資源類型的一種虛擬的用戶
       文件/etc/httpd/conf/.htpasswd
       SQL資料庫
       dbm:
       ldap:輕量級目錄訪問協議
    認證類型(auth):
        basic:基本認證,賬號和密碼明文發送
        digest:摘要認證,hash編碼之後發送
    認證提供者(authentication provider):賬號和密碼的存放位置
      authn
    授權機制(authorization):根據什麼進行授權
    案例:基於文件,做基本認證 根據用戶和組進行授權
    1、編輯配置文件,為需要認證的目錄配置認證機制
    <Directory "/www/htdocs/fin">A
        options None
        AllowOverride AuthConfig 使用認證配置
        AuthType Basic 使用基本認證
        AuthName "Private Area" 質詢時標題
        AuthUserFile /etc/http/conf/.htpasswd  密碼的存放位置
        Require vaild-user 可訪問的用戶

    </Directory>
    2、使用htpasswd命令使用生成認證庫
      htpasswd
      -c 創建密碼,創建第一個用戶時使用 ,後續在同一個身份認證庫中添加用戶名和密碼時記得不需要加-c選項,否則會覆蓋掉原有文件
      htpasswd -c -m /etc/http/conf/.htpasswd tom
      -m MD5格式存放
      -b 批量模式
      -D 刪除用戶
    3、基於組認證
    <Directory "/www/htdocs/fin">
        options None
        AllowOverride AuthConfig 使用認證配置
        AuthType Basic 使用基本認證
        AuthName "Private Area" 質詢時標題
        AuthgroupFile /etc/http/conf/.htpasswd  密碼的存放位置
        Require group GroupName  可訪問的用戶

    </Directory>
       先創建用戶,在創建組
       組文件:
         組名:用戶1 用戶2 用戶3

 15.虛擬主機
     一個物理伺服器提供多個站點;使用虛擬主機得先取消中心主機(預設主機)
     基於不同的IP實現不同的虛擬主機
        變化IP
     基於不同的port實現不同的虛擬主機
        變化port
     基於不同主機名實現不同的虛擬主機
        變化ServerName的值
    通過請求報文中的HOST來實現不同的虛擬主機訪問  首先要將上面的#NameVirtualHost *:80註釋去掉,並且在VirtualHost中IP:port都需要以*:80來標註 還要修改LINUX機中的主機指向地址,WINDOWS中也需要進行一些修改。
     
    <VirtualHost IP:port>
      SeverName
      DocumentRoot ""
      <Directory "">
      </Directory>
      ServerAlias
      ServerAdmin
    </VirtualHost>
    將全局中的DocumentRoot""註釋掉

   虛擬主機的單獨配置
       用戶認證
       訪問日誌
       錯誤日誌
       別名
       腳本別名

   基於IP認證機制,基於用戶認證

       http協議認證、表單認證

16.https協議
     x509.3證書格式
         證書格式的版本號
         證書序列號
         證書簽名演算法
         證書頒發者
         有效期
         持有者的名稱
         持有者的公鑰
         CA的ID
         持有者的ID
         其他擴展信息
              基本約束
              證書策略
              密鑰的使用限制
         CA簽名
    ssl握手要完成的工作
         交換協議版本號
         選擇一個雙方都支持的加密方式
         對兩端實現身份驗證
         密鑰交換
    http:文本協議 80/tcp
    https:二進位格式的協議 443/tcp

    SSL會話基於IP地址進行:不支持在基於主機名的虛擬主機上實現 因為SSL回話進行是在DNS功能變數名稱解析後進行的,所以進行的還是IP地址的通信

    客戶端驗證伺服器端證書時:
          日期檢查:證書是否在有效期內
          證書頒發者的可信度
          證書的簽名檢測:
          持有者的身份檢測


    httpd:基於mod_ssl模塊實現對ssl的支持
      可以在/etc/pki/tls/certs
      openssl s_client
      -connet:驗證的地址:埠
      -CAfile:CA證書的路徑
    1)、準備好伺服器的私鑰和證書
    2)、安裝mod_ssl模塊
         yum -y install mod_ssl
    3)、配置/etc/httpd/conf.d/ssl.conf
       配置實用ssl的虛擬主機
          ServerName
          DocunmentRoot
       配置證書和私鑰
          SSLCertificatFile 證書文件
          SSLCertificatKeyFile 密鑰文件
     4)、重啟httpd服務
     5)、測試
         openssl s_client -connet:驗證的地址:埠  -CAfile:CA證書的路徑

    URL Rewrite:URL重寫

17、伺服器status頁面
    內生的status信息,且此信息可以通過web予以顯示
   基於文件系統路徑訪問屬性
    <Directory [~] "">
    </Directory>

    基於URL訪問屬性
    <Location [~] "">
    </Location >

     也可以使用<LocationMatch "">
     </LocationMatch>來實現正則表達式的配置

    基於單個文件的訪問屬性
     <File [~] "">
     </File>


     

     如果要配置其屬性的URL能映射到某具體文件系統路徑,建議使用<Directory>

    處理器:當文件被調用時,Apache內部表現形式:一般每種文件類型都有其隱式處理器;否則需要自己定義
       顯式的定義使用的處理器:SetHandler


    <Location /URL>
        setHeandler server-status
    </Location>


    定義訪問控制機制
        基於IP控制
        基於用戶控制

    示例:
     <Location /server-status>
          SetHandler sever-status
          AuthType Basic
          AuthName "Sever Status"
          AuthUserFile "/etc/http/conf/.htpasswd"
          Require valid-user 允許所有用戶
          Order deny,allow
          Allow from all
      </Location>


18、curl命令

curl是基於URL語法在命令行方式下工作的文件傳輸工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等協議。curl支持HTTPS認證,並且支持HTTP的POST、PUT等方法, 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

19、使用mod_deflate模塊壓縮頁面優化傳輸速度,可以寫為一行,也可以寫多行,預設為gzip

SetOutputFilter DEFLATE

# mod_deflate configuration
<IfModule mod_deflate.c>
 
    # 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)預設為6
    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

</IfModule>


擴展功能
    apachectl
       Apache HTTP服務控制工具
    ab
       Apache HTTP伺服器性能測試工具
    apxs
       Apache 擴展工具
    configure
       配置源代碼
    dbmmanage
       為基本認證創建和更新DBM格式的用戶認證文件
    htcacheclean
       清理磁碟緩存
    htdigest
        為摘要認證創建和更新用戶認證文件。
    htdbm
        操作 DBM 密碼資料庫。
    htpasswd
        為基本認證創建和更新用戶認證文件。
    httxt2dbm
        為 RewriteMap 創建 dbm 文件。
    logresolve
        將 Apache 日誌文件中的 IP 地址解析到主機名稱。
    rotatelogs
        不關閉 Apache 而切換日誌文件。
    suexec
        執行外部程式前切換用戶。

20.資源限定
    軟限制:可以超出的限制,但僅能超出一定時長
    硬限制:絕對不能超出的限制
   ulimit:只能修改軟限制
       -n [N]:顯示或限制能打開的最大的文件句柄數,
       -u [N]:所能夠打開的最大進程數
    如果修改硬限制
      /etc/security/limits.conf,擴展配置etc/security/limits.d/*.conf
 對誰進行限定    類型  要限定的選項 值

 21、ab工具的初步使用
    -c 模擬的併發數
    -n 模擬的總請求數
   一般併發數應該小於等於請求數
   http_load webbench seige(只做參考)
   tcp_copy

22、httpd-2.4編譯安裝  01:00
    依賴於更高版本的apr和apr-util
    apr全程 apache portable runtime

     1)解決依賴關係
         yum -y install pcre-devel
     2)編譯安裝apr
        tar
        cd
        ./configure --prefix=/usr/local/apr
        make && make install
     3)編譯安裝apr-util
         tar
         cd
          ./configure --frefix=/usr/local/apr-util --with-apr=/usr/local/apr
          make && make install

      httpd2.4新特性
        1)MPM支持在運行時裝載
             --enable-mpms-shared=all --with-mpm=event 啟用預設的event
        2) 支持event
        3)非同步讀寫
        4) 在每模塊及每目錄上指定日誌級別
        5)每請求配置:<If> <Elseif>
        6) 增強版的表達式分析器
        7) 毫秒級的keepalive timeout
        8)支持主機名的虛擬主機不在需要NameVirtualHost指令
        9) 支持使用自定義變數
        新增一些模塊:mod_proxy_fcgi,mod_ratelimit,mod_request,mod_remoteip
        對於基於IP的訪問做了修改,不在使用order,allow,deny這些機制;而是統一使用require進行
    4)編譯httpd
       tar
       cd
       ./configure --prefix=/usr/local/apache(安裝路徑) --sysconfdir=/etc/httpd24(配置文件) --enable-so(基於DSO動態載入模塊) --enable--ssl(能基於SSL協議) --enable-cgi(支持CGI機制) --enable-rewrite(支持URL重寫) --with-zlib(支持數據壓縮發送) --with-pcre(perl語言相容正則表達式庫) --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modeles=most(常用的,也可以改成all啟用全部的) --enable-mpms-shared=all(將所有的mpm模塊編譯進來) --with-mpm=event(預設使用event模塊)
       make && make install
       頭文件、庫文件、幫助文檔、二進位
       後續的配置
       1 導出頭文件
       ln -sv /usr/local/appache/include /usr/include/httpd
       2 導出庫文件
        ldconfig -p 顯示當前系統的庫文件
       該安裝並沒有提供庫文件
       3 導出幫助文件
         vim /etc/man.config   
         添加MANPATH /usr/local/apache/man
         man -M /usr/local/apache/man httpd
       4 導出二進位文件
          vim /etc/profile.d/httpd.sh
          export  PATH=/usr/local/apache/bin:$PATH
       5 修改啟動的腳本
    cp /etc/rc.d/init.d/httpd /etc/rc.d/init.d/httpd24
    vim /etc/httpd24/httpd.conf
    隨意在空白處添加 PidFile "/var/run/httpd24.pid" 此為自定義PID文件位置
    vim /etc/rc.d/rc.d/httpd24
    apachectl=/usr/local/apache/bin/apachectl
    httpd=/usr/local/apache/bin/httpd
    prog=httpd
    pidfile=${PIDFILE-/var/run/httpd24.pid}
    lockfile=${LOCKFILE-/var/lock/subsys/httpd24}
    RETVAL=0
    STOP_TIMEOUT=${STOP_TIMEOUT-10}
     最後
    chkconfig --add httpd24
    


博客:配置CGI、虛擬主機、https、mod_defaults mod_status

基於IP訪問控制:
    允許所有主機訪問:Require all granted
    拒絕所有主機訪問:Require all deny
    控制某主機的訪問
      Require ip IPADDR
      Require not ip IPADDR
       IPADDR:
          單個IP地址,例如172.16.100.7
          network/netmask 例如172.16.0.0/255.255.0.0
          network/Length 例如172.16.0.0/16
          Net 172.16
      Require host IPADDR
      Require not host IPADDR
         Hostname
           GQDN:具體的主機
           域:.magedu

I/O:
    阻塞: 進程發起I/O調用,未完成之前,當前進程會被掛起
    非阻塞:進程發起I/O調用,被調用函數完成之前不會阻塞當前進程而是立即返回 進程可以去乾別的事,但是卻不知道該I/O請求何時完成,需要重新回來查看

    同步:進程發起一個過程調用(功能、函數)調用後,在沒得到結果之前,該調用將不會返回
    非同步:進程發起一個過程調用,即便調用者不能立即得到結果,當調用卻會返回,返回時未完成狀態,當調用完成後,內核會自行通知調用者已經OK

    同步阻塞
    非同步非阻塞
    非同步阻塞

記憶體映射:mmap
I/O模型有5種:幾種情況的簡單解釋  第一階段:內核向磁碟發起請求數據並存到內核空間中。第二階段:內核空間複製數據到進程記憶體空間中,併發送給進程 。一般來講阻塞和非阻塞發生在第一階段中 而同步與非同步發生在第二階段中
     同步阻塞    即第一階段阻塞,第二階段同步
     同步非阻塞  第一階段非阻塞,即內核可以去乾自己事。但是第二階段同步,所以 其實與同步阻塞沒有多大區別
     I/O復用 select()poll() 第一階段阻塞
     事件驅動 epoll()wqueue()
        邊緣觸發
        水平觸發
     AIO(非同步非阻塞)

                              mysql丶lamp


併發響應用戶請求時網路I/O
      單進程
      多進程/線程:prefork(一個進程響應一個請求),worker(一個線程響應一個請求)
      select()
      復用模型:單線程響應多個用戶請求(事件驅動)
          epoll()
       多線程,每個線程響應多個請求 m*n
網路不支持非同步
  I/O模型
     同步阻塞
     同步非阻塞
     I/O復用
     時間驅動
     AIO

web: httpd nginx lighttpd
   html plaintext jpeg gif png video
   多媒體類型 主類型/次類型

    首部:通用、請求、響應、實體、擴展
       條件式請求:If-Modified-Since If-None-Match

   請求報文格式    <method> <request-URL> <version>
                   首部

               <entity-body>

      響應報文格式 <version><status><reason>

               首部
               <entity-body>

       httpd:虛擬主機、https、別名、<Directory><Location><File>
            Options


動態網站:
    程式:
        java applet  早期在客戶端上執行的,通過JVM(JAVA虛擬機)上運行下載下來的JAVA程式 來執行。不太安全
        伺服器端執行
            靜態資源:jpeg,html,plaintext
            動態資源:程式

            硬編碼:直接嵌套進程式中,而且很難剝離出來
           
            分體式結構:即前端設計歸前端設計,程式開發歸程式開發。只需要在HTML中引用程式,
              
               可嵌入html中的web開發機制:



    程式=指令+數據

    程式=演算法+數據結構

    文本資料庫缺陷
        數據冗餘和不一致
        數據訪問困難
        數據孤立
        完整性問題
        原子性問題
        併發訪問問題
        安全性問題
    DMBS: DataBase Management System

    用戶層 邏輯層 物理層  資料庫的訪問類似於操作系統。操作系統給我們提供了很多API(庫)程式員給他們全部編寫成程式,我們可以執行程式來實現功能,但是確缺少一個更好的溝通平臺。於是有了BASH SHELL 再提供一個更好與電腦溝通的平臺,讓用戶執行某些程式員編寫好的命令,就可以與內核進行溝通。而資料庫的用戶層與邏輯層之間也是基於類似的機制,此成為SQL

    數據模型
        層次模型
        網狀模型
        關係模型
            庫和表
        非關係型資料庫模型:nosql

            笛卡爾乘積
what is CAP???????

LAMP:Linux Apache MySql php/perl/python

開源資料庫:
     salite
     MySql,PostgreSQL(EnterpriseDB)
     MariaDB
收費資料庫
     Oracle

     MySQL:

     (存取方法)文件管理器
     緩衝區管理器
     磁碟空間管理器     
     數據 索引 事務日誌

     事務:一個事情的多次操作的組合,M滿足ACID測試
        A:原子性
        C:一致性
        I:隔離性
        D:持久性
     SQL: struct query language
        支持
         DCL:數據控制
         DDL :date definbation 數據定義語言
              CREATE/ALTER/DROP
         DML:data Manipulation 數據查詢語言
             INSERT/DELETE/SELECT/UPDATE
解釋器:接受並解釋命令

查詢引擎包括:分析器,查詢計劃器,求解器,優化器
驅動:一個程式員使用的API連接資料庫的,在應用程式端

線程池:用來管理連接的管理件
線程管理器:

ODBC:Open DataBase Connectivity
ANSI:
 SQL-86,SQL-89,SQL-92,SQL-99,SQL-2003

mysqld/mysql

安裝使用mysql:mysql.com
      1、Vendor:操作系統自帶的rpm包
      2、MySql官方rpm包
      3、通用二進位格式
      4、源碼編譯
建議做在硬raid的lvm上
基於通用二進位格式,以5.5為例
    記憶體足夠大,硬碟足夠快
tar xf -C /usr/local/
ln -sv     mysql
執行資料庫初始化腳本
cd scripts
mysql_install_db
--basedir 安裝目錄
--datadir  數據目錄
--defaults-extra-file 額外文件的目錄(安裝文件)
--user 運行用戶
frm:欄位
myd:數據
myi:索引
scripts/mysql_install_db --datadir=/data/mydata/ --usr=mysql
cp support-files/mysql.server /etc/rc.d/init.d/mysqld 添加服務啟動腳本到init.d下
cp support-files/my-large.cnf /etc/my.cnf
vi /etc/my.cnf
添加
datadir=

ibdatal
事務日誌
ib_logfile0
ib_logfile1
二進位日誌
mysql-bin
二進位日誌的索引文件
mysql-bin.index
mysql存儲引擎 表類型
   MyISAM
   InnoDB --> XtraDB(percona) Xtrabackup
將客戶端運行程式添加到環境變數中
vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
source /etc/profile
這樣輸入mysql就啟動mysql客戶端
導出頭文件
導出庫文件
ldconfig -p 查看
ldconfig 載入所有的

mysql客戶端
   用戶名
   --user=Username
   -u Username

   密碼
   -p
   --password=

   主機
   -h Hostname
   --host=Hostname

   執行命令
      -e ‘SQL COMMAND’

用戶賬號
   用戶@主機

修改管理員密碼
mysql 下
SET PASSWORD FOR 'root'@'localhost'=PASSWORD('密碼');

SET PASSWORD FOR 'root'@'127.0.0.1'=PASSWORD('密碼');<

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在上一篇中我們寫瞭如何在windows中使用docker運行.netcore,既然我們瞭解了windows下的運行發佈,我們也可以試試linux下使用docker運行.netcore項目,那麼今天我們就一起看看如何在linux下使用docker運行.netcore項目吧 首先在linux環境下安裝d ...
  • 預編譯是ASP .Net Core的預設方式。在發佈時,預設會將系統中的所有Razor視圖進行預編譯。編譯好的視圖DLL統一命名為 xxx.PrecompiledViews.dll 或者 xxx.Views.dll ...
  • WeihanLi.Redis自定義序列化及壓縮方式 Intro "WeihanLi.Redis" 是基於 "StackExchange.Redis" 的擴展,提供了一些常用的業務組件和對泛型的更好支持,預設使用 JSON.Net 為基礎的 JSON序列化,使用 GZip 進行數據壓縮。 從 1.3. ...
  • 訪問修飾符 訪問修飾符是一些關鍵字,用於指定聲明的成員或類型的可訪問性,C 有4個訪問修飾符:public、private、protected、internal,使用這些訪問修飾符可以指定以下5個訪問級別: public: 同一程式集(DLL或EXE)中的任何其他代碼或引用該程式集的其他程式集都可以 ...
  • 實體類: ...
  • 關鍵字:工作流程數據加密 md5 數據保密流程數據防篡改軟加密設置方式: 對工作流引擎的數據加密研究, 流程數據的加密方案與實現過程.輸入圖片說明需求背景1, 流程數據加密是為了防止流程數據被篡改的需要,從而造成對單位的不必要損失。2, 流程數據篡改是具有管理員身份與非法入侵者,尤其是防範業務人員與... ...
  • su命令從普通用戶切換到root用戶下雖然可以切換,但是切換過後它所屬的環境變數沒有切換回原本屬於root本身該有的環境變數,使用su - root 就可以切換會本來用戶所屬自身的變數 ...
  • yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake yum -y install wget httpd-tools vim yum install zlib zlib-devel yum install openssl ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...