httpd2.2/2.4全攻略

httpd-2.2/2.4配置用法全攻略

 本文介紹以下四部分內容,且看下文。

wKioL1k_1PjBZA_QAAAtFeXGd0I731.png

 一、簡介

 The Apache HTTP Server is a powerful, efficient, and extensible web server.

                                                                               from  http://httpd.apache.org/

 httpd is the Apache HyperText Transfer Protocol (HTTP) server program. It is designed to be run as a standalone daemon process. When used like this it will create a pool of child processes or threads to handle requests.                                                                                                                                                                                                                                           form https://httpd.apache.org/docs/2.4/programs/httpd.html     

 以上簡介來自apache官方網頁,我自己簡單理解是這樣的。首先httpd服務是基於http超文本傳輸協議的服務程序。它是非常強大,有效率以及高擴展性的web服務。它以獨立的守護進程的方式運行,支持多進程多線程處理多個請求。不僅僅這樣httpd還具有很多的特性,比如模塊化是它最強大的一個特性,下面介紹httpd的特性。

  二、httpd的特性  

wKiom1k_2IfjN17IAAAfgADndxY407.png

 我個人理解,httpd有兩大特性(應該不全):一是高度模塊化;二是DSO,即可動態地加載模塊。

  2.1 高度模塊化

  也許你會問高度模塊化有什麼用?高度模塊化用處可大着呢!想象這樣一個情況,假如我們的手機可以實現模塊化,那我們就可以根據自己的喜歡定製自己鍾愛的手機,我們隨時可以根據自己的心情,任何時間,任何地點,修改自己的手機,想想是不是很刺激。那httpd也一樣,我們也可以根據模塊化,定製一款自己鍾愛的httpd服務。長話短說,高度模塊化就是功能模塊化,可根據自己需要的功能添加對應的模塊。

  模塊化中有一個MPM模塊十分的重要,不得不說。

wKiom1k_2oTBqdcVAAAlvFBmvRg022.png

 MPM翻譯過來就是多路處理模塊,你也可以理解爲多進程處理模塊,因爲此模塊跟進程相關。三個模塊的介紹以及區別,如下圖所示。

wKioL1k_2v2hBZ9OAABPVA_lFdU153.png

 你可以看到,MPM模塊主要是跟進程,線程以及響應請求相關,也就是和我們的web併發訪問相關的。因此,你可以評估web訪問的相關情況來選擇合適的模塊。

  CentOS7系統中想要查看或者修改MPM在此配置文件:/etc/httpd/conf.modules.d/00-mpm.conf 

  CentOS6系統中想要查看或者修改MPM在此配置文件:/etc/sysconfig/httpd

  另外需要注意的是:CentOS6中event(事件驅動機制)還不成熟,因此很少用;而CentOS7中event(事件驅動機制)已經成熟,可以投入到生產環境中使用。

  此外httpd還支持很多的模塊,比如mpm_winnt,它是支持windowNT的多線程MPM模塊;比如mod_ssl,它是支持安全加密的模塊,我們想要做一個基於https安全的web訪問就需要用到這個模塊。

  模塊有很多,詳見官方文檔:https://httpd.apache.org/docs/2.4/mod/

 2.2 DSO(動態共享對象)   

    DSO(dynamic shared object),動態共享對象,即可動態加載模塊。光有很多模塊不行,還得要實現模塊加載的方式,DSO就是這麼一個實現,可以動態加載模塊。

  詳見官方鏈接:http://httpd.apache.org/docs/current/dso.html

三、httpd的功能特性

wKioL1k_3zyi8XvxAABLg9sYHXY666.png

 httpd的功能特性如圖所示,因爲在後面的常見配置中會被詳細說明,所以此處儘量長話短說。

   1.CGI

        通用網關接口

        實現動態頁面

        性能差

        參考鏈接:http://docs.huihoo.com/apache/httpd/2.0-cn/howto/cgi.html

 2.支持虛擬主機的功能

    簡單理解,虛擬主機就是在單一機器上運行多個網站。它的實現方式有以下三種:

    即基於IP地址實現虛擬主機,基於port端口實現虛擬主機,即基於FQDN實現虛擬主機,FQDN由主機名以及域名組成。它們的特點已在圖中所示,還請看圖。實現虛擬主機必將需要指令,指令將會在常見配置中詳細說明。常見指令如下:   

 <VirtualHost>
         ServerName
         ServerAlias
         DocumentRoot
         CustomLog
         ErrorLog
   </VirutalHost>

wKioL1k_4HGg4DHcAAA7aaS_vcg503.png

        參考鏈接:

            https://httpd.apache.org/docs/2.4/vhosts/

            http://httpd.apache.org/docs/2.2/vhosts/

    3.支持反向代理

        簡單理解,就是服務器的代理。後端服務器(如Web服務器)響應用戶請求,然後再將響應報文返回代理服務器,再經由代理服務器將響應報文發送給客戶端。   

   4.支持負載均衡

        簡單理解,就是將負載合理分配,以達到最佳化資源使用、最大化吞吐率、最小化響應時間、同時避免過載的目的。

    5.支持路徑別名    

        路徑別名關聯一個目錄或者文件的路徑,它與url和文件系統路徑的映射相關,會在常見配置中詳細說明。

        參考鏈接:http://www.178linux.com/12685 

    6.支持用戶認證機制

        簡單理解,即認證用戶的合法性,比如認證賬號,密碼,身份等等。用戶認證機制支持多種認證方式,常見的有basic(基本認知方式)和digest(摘要認證),基於算法的認證方式。

    7.支持第三方模塊

        如果你能力足夠強大,完全可以自己製作一個模塊嵌入httpd服務當中,這個功能相當人性化以及具備開源精神。

四、httpd的程序版本 

wKiom1k_5T-z9-9_AAAkGnIrXCk925.png

     httpd到目前爲止有四個版本。1.3官方已經停止維護,不再介紹。

    2.0也用到極少,也不再介紹,詳見鏈接http://httpd.apache.org/docs/2.0/ 主要詳細介紹2.2以及2.4。

 4.1 httpd2.2

wKioL1k_5i3zfbhxAAAVTTjJp8E060.png

    httpd2.2介紹兩個部分:程序環境以及常用配置。

 4.1.1 httpd2.2程序環境

   httpd2.2的程序環境如下,在這裏我主要介紹CentOS6.8的程序環境。具體信息還請看思維導圖,文字只做部分補充。

    配置文件補充:

      配置文件:/etc/httpd/conf/httpd.conf主要分爲三大部分內容,分別爲全局環境配置,主服務配置,虛擬主機配置。我們定義的站點信息可以在/etc/httpd/conf/httpd.conf中配置,也可以在/etc/httpd/conf.d/中自定義一個以.conf結尾的配置文件,在其中配置站點信息。     

        Section 1: Global Environment

        Section 2: 'Main' server configuration

        Section 3: Virtual Hosts

    主程序文件補充:

     /usr/sbin/httpd.worker

     /usr/sbin/httpd.event(2.2測試階段)

     兩種MPM模塊在上面已有介紹,如果不記得可以返回看看。默認開啓worker模式

wKiom1k_5ofzzR2ZAADWXWKqGJo847.png

  日誌文件補充:

     日誌文件分爲訪問日誌和錯誤日誌,我們也可以自定義日誌的存放路徑,這個將在常見配置中介紹。

 4.1.2 httpd2.2常見配置

wKiom1k_6m3T-QpyAACNV0jSc-c490.png      

 總結了19個常見配置,其中有些是工具與配置無關,但在httpd的工作或者測試中會用到,因此也放在了常見配置中。

 這些常見配置主要在以下兩個路徑配置,但個別不再此路徑中,我會在相應的文段中特別說明。    

    /etc/httpd/conf/httpd.conf

    /etc/httpd/conf.d/*.conf    #推薦此方法,模塊化思想    

 所有的配置都支持如下的格式

    directive  value

        directive:指令,不區分字符大小寫;

        value:值爲路徑時,是否區分字符大小寫,取決於文件系統;  

 1、修改監聽的IP和PORT

  Format

    Listen [IP-address:]portnumber [protocol]

  Note

    (1) 省略IP表示爲0.0.0.0

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

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

    (4)限制其必須通過ssl通信時,protocol需要定義爲https

 2、長連接(PersistentConnection)

 定義

    也稱爲持久連接,tcp連續建立後,每個資源獲取完成後不完全斷開連接,而是繼續等待其它資源請求的進行。

  如何斷開

    數量限制

    時間限制

  副作用

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

  解決方案

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

例子
   設置
      
   KeepAlive  On|Off        #是否開啓長連接
    KeepAliveTimeout  15         #長連接最大時長
    MaxKeepAliveRequests  100    #長連接最大請求數量
  測試
    telnet  WEB_SERVER_IP  PORT   #使用telnet命令輸入web服務的IP 端口    
    GET  /URL  HTTP/1.1           #請求方式 站點名稱 http協議版本                     
    Host: WEB_SERVER_IP           #主機IP

 3、MPM配置

wKioL1k_7lfQ9jQ_AAAq4NtGiRI795.png

   

    3.1查看httpd的MPM工作模式

        ps  aux  | grep httpd

wKioL1k_7rqDT7zjAAAlZoH-NLI848.png 

    3.2查看httpd的模塊列表  

         查看靜態編譯的模塊:httpd  -l

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

   3.3更換使用的MPM機制 

        配置文件:/etc/sysconfig/http注意:

        重啓服務進程方可生效

wKiom1k_71rDl4F_AAAjSxq3k28985.png

    3.4MPM配置

     3.4.1 prefork的配置  

<IfModule prefork.c>
      StartServers    8     #起始空閒進程數     
      MinSpareServers   5     #最小空閒進程
      MaxSpareServers   20        #最大空閒進程數
      ServerLimit     256       #最大活動進程數
      MaxClients     256        #併發請求的最大數;   #請求連接進來不一定會活動,要小於等於serverlimit
      MaxRequestsPerChild 4000      #每個子進程在生命週期內所能夠服務的最多請求個數 
</IfModule>

     3.4.2 worker的配置     

<IfModule worker.c>
        StartServers:                #啓動的子進程的個數
        MaxClients:                   #併發請求的最大數;
        MinSpareThreads:             #最小空閒線程數;
        MaxSpareThreads:             #最大空閒線程數;
        ThreadsPerChild:             #每個子進程可生成的線程數;
        MaxRequestsPerChild:         #每個子進程在生命週期內所能夠服務的最多請求個數,0表示不限定;
</IfModule>

   4、DSO(動態共享對象)

     DSO,即動態地加載指定模塊。

  1.    格式:LoadModule <mod_name> <mod_path>

  2.    模塊文件路徑可使用相對路徑,相對於ServerRoot(默認/etc/httpd)     

    5、定義'Main' server的文檔頁面路徑

      ServerName

        Description: Hostname and port that the server uses to identify itself(即主機名).      

        語法格式: ServerName [scheme://]fully-qualified-domain-name[:port]

        比如這樣:ServerName www.google.com

     DocumentRoot  ""

  1.  Description: Directory that forms the main document tree visible from theweb(web頁面根目錄,DoucmentRoot指向的路徑爲URL路徑的起始位置,其相當於站點URL的根路徑).

  2.  Syntax: DocumentRoot directory-path      

  3. 比如這樣:DocumentRoot /web/www/html    

  4.  注意:URL PATH與FileSystem PATH不是等同的,而是存在一種映射關係;

        比如存在下面的對應關係

      URL /  --> FileSystem /var/www/html/     

      /images/logo.jpg --> /var/www/html/images/logo.jpg

    6、站點訪問控制常見機制

     可基於兩種機制對資源進行訪問控制,一是操作系統中的文件系統路徑,二是通過站點的URL路徑來實現控制。

      6.1 通過文件系統路徑實現訪問控制    

    <Directory>和</Directory>用於封裝一組指令,使之僅對某個目錄及其子目錄生效。任何可以在"directory"作用域中使用的指令都可以使用。Directory-path可以是一個目錄的完整路徑,或是包含了Unixshell匹配語法的通配符字符串。在通配符字符串中,"?"匹配任何單個的字符,"*"匹配任何字符序列。您也可以使用"[]"來確定字符範圍。但需要注意的是,以上通配符都不能匹配"/"字符。

    <Files>指令提供了基於文件名的訪問控制的方式。

    以下是從官方文檔摘錄下來的,很值得參考:

       
        <Directory"">                #對目錄封裝
        ...
         </Directory>
        
         <Directory />                
           Order Deny,Allow 
           Deny from All            #表示拒絕所有所有人訪問操作系統的/目錄
         </Directory>
       
         <Directory ~ "public_html/.*"> #表示對目錄public_html下的任何路徑資源封裝
        # ... directives here ...
         </Directory>
       
         <DirectoryMatch "^/www/(.+/)?[0-9]{3}"> #將匹配/www/下所有由3個數字組成的目錄。
        
        <File  "">              #基於文件名的訪問控制
            ...
        </File>
        
        <Files "?at.*">        #對cat.html, bat.html, hat.php等等文件進行匹配封裝。 
            # This would apply to cat.html, bat.html, hat.php and so on. 
        </Files>
        
        <FileMatch"PATTERN">    #通過正則表達式,基於文件的訪問控制
        ...
        </FileMatch>
        <FilesMatch "\.(gif|jpe?g|png)$">   #對.gif,,jpeg,.png等等文件進行匹配封裝        

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

          6.1.1.1 httpd-2.2中實現,通過order指令實現基於源地址的訪問控制

        order指令

               說明:控制默認的訪問狀態與Allow和Deny指令生效的順序

    語法:Order ordering

    默認值Order Deny,Allow

      Allow from, Deny from

        在下面的例子中,apache.org域中所有主機都允許訪問,而其他任何主機的訪問都將被拒絕。

    Order Deny,Allow
    Deny from all
    Allow from apache.org

        下面這張表說明了allow,deny的規則

wKiom1lD1umROlt6AAAz6oSz3U4385.png    

   6.1.1.2 httpd-2.4中實現

    基於IP控制:

      Require ip  IP地址或網絡地址

      Require not ip IP地址或網絡地址

         基於主機名控制:

      Require host 主機名或域名

      Require not host 主機名或域名

            下面是httpd-2.2以及httpd-2.4實現訪問控制的幾個例子        

控制頁面資源允許所有來源的主機可訪問
  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>

       6.2 通過URL路徑實現訪問控制 

          說明:將封裝的指令作用於匹配的URL

          語法:<Location URL-path|URL> ... </Location>

          <Location>提供了基於URL的訪問控制。

自foo.com的用戶起效,你可以這樣使用:
<Location /status>
    SetHandler server-status
    Order Deny,Allow
    Deny from all
    Allow from .foo.com
</Location>
<LocationMatch "/(extra|special)/data">    #說明:將封裝的指令作用於正則表達式匹配的URL
</LocationMatch>
將匹配包含子串"/extra/data"或"/special/data"的URL。

    6.3 Options指令說明    

      說明:配置在特定目錄的選項,這些選項可以指定使用哪些特性

      語法:Options [+|-]option [[+|-]option] ...

      默認值:Options All

      option可以爲None ,在這種情況下,將不啓用任何額外特性。

     All

            除MultiViews之外的所有特性都生效。這是默認設置。

     ExecCGI 

        允許使用mod_cgi執行CGI腳本。

      FollowSymLinks

              服務器允許在此目錄中使用符號連接特性。

      Indexes

          如果一個映射到目錄的URL被請求,而此目錄中又沒有DirectoryIndex(例如:index.html),那麼服務器會返回由mod_autoindex生成的一個格式化後的目錄列表。

<Directory /web/docs>
    Options Indexes FollowSymLinks
</Directory>

    7、定義站點主頁面

      DirectoryIndex index.html index.txt /cgi-bin/index.pl

    8、定義路徑別名

      說明:映射URL到文件系統的特定區域

      語法:Alias URL-path file-path|directory-path

     作用域:server config, virtual host

     Alias指令使文檔可以被存儲在DocumentRoot以外的本地文件系統中。

示例:
Alias /image /ftp/pub/image

    對"http://myserver/image/foo.gif"的請求,服務器將返回"/ftp/pub/image/foo.gif"文件。

    9、設定默認字符集

      AddDefaultCharset  UTF-8

                 中文字符集:GBK, GB2312, GB18030

        10、日誌設定

     10.1 訪問日誌

         CustomLog 指令

        說明:設定日誌的文件名和格式

        語法:CustomLog file|pipe format|nickname [env=[!]environment-variable]

        作用域:server config, virtual host

      CustomLog指令用來對服務器的請求進行日誌記錄。第一個參數指定了日誌記錄的位置,第二個參數指定了寫入日誌文件的內容.

# 明確使用格式格式字符串
CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b"
#簡單設置方式
CustomLog  logs/access_log  combined        #相對於ServerRoot的日誌文件名。

    LogFormat format strings:

      詳情請參考:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

      %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”的值;即發出請求的應用程序;

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

     10.2 錯誤日誌

           ErrorLog 指令

      說明:存放錯誤日誌的位置

      語法:ErrorLog file-path|syslog[:facility]

      默認值:ErrorLog logs/error_log (Unix) ErrorLog logs/error.log (Windows 和 OS/2)

      作用域:server config, virtual host

      ErrorLog指令指定了記錄錯誤日誌的文件。如果file-path不是一個以斜槓(/)開頭的絕對路徑,那麼將被認爲是一個相對於ServerRoot的相對路徑。

示例
ErrorLog /var/log/httpd/error_log

    記錄錯誤日誌的等級一般是:LogLevel  warn,以下是關於錯誤日誌的說明

wKiom1lD3_Xxl4ukAABpImuBkLk037.png

    11、基於用戶的訪問控制

    說明:認證(Authorization)就是用戶填入賬號和密碼後再次向服務端發送請求報文;認證通過時,則服務器發送響應的資源。

     11.1 基於basic方式認證(明文)

                 11.1.1 基於用戶進行認證

        思路:

          (1) 定義安全域

<Directory "">
       Options None
       AllowOverride None
       AuthType Basic
       AuthName "String“
       AuthUserFile  "/PATH_FILE"
       Require  user  username1  username2 ...
</Directory>     

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

使用專用命令完成文件的創建及用戶管理
htpasswd  [options]/PATH_PASSWD_FILE username                    
 -c:自動創建此處指定的文件,因此,僅應該在此文件不存在時使用;
-m:md5格式加密
 -s: sha格式加密
 -D:刪除指定用戶
 -b:批模式添加用戶 
htpasswd -b  [options]  PATH_PASSWD_FILE  username password          #批量指定用戶名以及密碼

                11.1.2 基於組賬號進行認證

       思路:

        (1) 定義安全域

<Directory "">
        Options None
        AllowOverride None
        AuthType Basic
        AuthName "String“
        AuthUserFile  "PATH_PASSWD_FILE"
        AuthGroupFile "PATH_GROUP_FILE"
        Require  group  grpname1  grpname2 ...
</Directory>

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

            組文件:每一行定義一個組 GRP_NAME: username1  username2  ...

    12、虛擬主機

     說明:虛擬主機功能十分重要。簡單來說,虛擬主機可以實現的功能就是在一臺服務器上虛擬出多臺主機的效果,可以實現多個站點的配置。虛擬主機的實現方案如下

wKiom1lD5t-Rkg7YAAA3BM59NIw429.png

     虛擬主機可以通過三種方式實現,即基於ip,基於port,基於FQDN(由主機名和域名組成,通常就是指一個站點名)。需要注意的是,在httpd2.2中,如果需要使用虛擬主機的功能,要先禁用mian host中的#DocumentRoot,而httpd2.4則不需要。三種實現方式的特點如下:

    

wKioL1lD54-zMnskAAAlqemPjsQ804.png

                 虛擬主機的配置方法:

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

               以下是三種配置方式的例子。

基於IP的虛擬主機示例:
     <VirtualHost 172.16.100.6:80>
      ServerName www.a.com
      DocumentRoot "/www/a.com/htdocs"
     </VirtualHost>
     <VirtualHost 172.16.100.7:80>
      ServerName www.b.net
      DocumentRoot "/www/b.net/htdocs"
     </VirtualHost>
     <VirtualHost 172.16.100.8:80>
      ServerName www.c.org
      DocumentRoot "/www/c.org/htdocs"
     </VirtualHost>
基於端口的虛擬主機 
     <VirtualHost 172.16.100.6:80>
      ServerName www.a.com
      DocumentRoot "/www/a.com/htdocs"
     </VirtualHost>

     <VirtualHost 172.16.100.6:808>
      ServerName www.b.net
      DocumentRoot "/www/b.net/htdocs"
     </VirtualHost>

     <VirtualHost 172.16.100.6:8080>
      ServerName www.c.org
      DocumentRoot "/www/c.org/htdocs"
     </VirtualHost>   
基於FQDN的虛擬主機     
    <VirtualHost 172.16.100.6:80>
      ServerName www.a.com
      DocumentRoot "/www/a.com/htdocs"
     </VirtualHost>

     <VirtualHost 172.16.100.6:80>
      ServerName www.b.net
      DocumentRoot "/www/b.net/htdocs"
     </VirtualHost>

     <VirtualHost 172.16.100.6:80>
      ServerName www.c.org
      DocumentRoot "/www/c.org/htdocs"
     </VirtualHost> 
     
     注意:如果是httpd-2.2,在使用基於FQDN的虛擬主機時,需要事先使用如下指令:
      NameVirtualHost IP:PORT

    13、status頁面

      顯式頁面的狀態信息

      LoadModule  status_module  modules/mod_status.so      #加載網頁狀態模塊

      示例

     <Location /server-status>
      SetHandler server-status
      Order allow,deny
      Allow from 172.16
     </Location>
httpd-2.4
     <Location /server-status>
      SetHandler server-status
      <RequireAll>
       Require ip 172.16
      </RequireAll>
     </Location>

    14、curl命令

     有關curl命令的用法,請看下圖。

wKioL1lD6pXztMZaAAC3Vqg3i78197.png

    15、user/group 

     指定以哪個用戶的身份運行httpd服務進程;

      User apache

      Group apache

    16、mod_deflate模塊

     當帶寬壓力大時會啓用壓縮,啓用壓縮不但能優化傳輸速度也能節約帶寬。此模塊的特點如下

wKioL1lD6-vAWRIJAAAyomGBjak116.png

              下面是一個示例

  1. root@localhost html]# vim /etc/httpd/conf/httpd.conf
     
    SetOutputFilter DEFLATE    #啓用deflate
     
     [root@localhost conf.d]# vim deflate.conf
     
        # 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                     #壓縮比,默認爲6
         
        # 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

    17、https,http over ssl

     https即指http基於ssl協議,這種協議使得用戶訪問站點時更加的安全。

     在httpd中配置https的思路是這樣的:

wKioL1lD7O7DDh6cAAAyrEwX5FM422.png

        (1) 爲服務器申請數字證書

        具體步驟可以參考我另一篇博客http://powermichael.blog.51cto.com/12450987/1933580

wKiom1lD7R-yMVRoAAAiISikoqc644.png

                    (2)配置httpd支持使用ssl及使用的證書    

              1.安裝ssl模塊 yum -y install mod_ssl

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

              DocumentRoot        #URL映射的文件系統路徑

              ServerName         #主機名

              SSLCertificateFile     #簽署證書文件路徑

              SSLCertificateKeyFile    #私鑰文件存放路徑                                    

                   (3) 測試基於https訪問相應的主機

                          openssl  s_client  [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename]

                18、httpd自帶的工具程序

wKioL1lD7neB96OrAABy9KvKOC0578.png

                19、httpd的壓力測試工具

wKiom1lD7rqAI9bsAABjVxvEDIM851.png

4.2 httpd2.4

  httpd2.4的介紹分爲以下四部分內容。由於httpd2.4常用配置和httpd2.2大抵相似,所以在這便不做過多的介紹。不同之處,也已經在httpd2.2的配置中說明,所以此處只做httpd2.4程序環境,新特性以及新模塊的介紹。

wKiom1lD70ei4nWRAAAfo6TZN_o349.png

 4.2.1 httpd2.4程序環境

wKiom1lD8QaQ5K_5AAC8012VZkk899.png

   補充:修改MPM模塊的文件路徑:/etc/httpd/conf.modules.d/00-mpm.conf


 4.2.2 httpd2.4常用配置(省略,請參考httpd2.2常用配置)

 4.2.3 httpd2.4新特性

   httpd2.4的新特性如圖所示。

wKiom1lD8e3R4CovAACKJ0P8Hck898.png

 4.2.4 httpd2.4新模塊

wKiom1lD8oSRGumkAAAX0GoiFyU822.png

 mod_proxy_fcgi 支持PHP等動態語言

    mod_proxy_scgi SCGI Protocol,支持Python

    mod_remoteip 獲取遠端真實訪問IP

    想了解更多的新模塊功能,請看官網:http://httpd.apache.org/docs/2.4/new_features_2_4.html

5.httpd2.2配置實驗(補充內容)

  5.1httpd2.2配置安全方案


    1.關閉一些不使用的模塊及功能

        可在LoadModule前加#,來註釋掉一些不使用的模塊   

    2. 隱藏banner信息

        ServerTokens OS  修改爲:ServerTokens Prod (在出現錯誤頁的時候不顯示服務器操作系統的名稱)

        ServerSignature On 修改爲:ServerSignature Off(不回顯apache版本信息)

    3. 配置httpd.conf禁止目錄瀏覽

        將Options Indexes FollowSymLinks改爲Options -Indexes FollowSymLinks

    4. 合理配置apache的運行賬戶

        爲apache單獨建立一個運行賬戶及賬戶組,並在httpd.conf配置

            User apache

            Group apache

    5. 合理控制apache運行賬戶對磁盤的寫入,執行權限

        取消apache運行賬戶對網站目錄的寫入權限,上傳目錄除外,其他非網站目錄儘量不給權限

    6. 配置httpd.conf取消對上傳目錄的php執行權限

        <Directory "/var/www/html/aaa">

            <FilesMatch ".(php|php5)$">

                Deny from all

            </FilesMatch>

        </Directory>

    7. 配置httpd.conf限制禁止訪問的文件夾,例如後臺目錄

        <Directory "/var/www/html/aaa">

            Deny from all

        </Directory>

    8. 配置httpd.conf限制一些特殊目錄的特定ip訪問,如內部接口等。

        <Directory "/var/www/html/aaa">

            Order Deny,Allow

            Deny from all

        Allow from 192.168.1.111

        </Directory>

    9. 配置httpd.conf限制一些文件類型的訪問,如txt的日誌

        <Files ~ ".txt$">

            Order allow,deny

            Deny from all

        </Files>

    10.配置httpd.conf修改修改監聽端口來防止一些內部系統被掃描

        這樣可以防止一些直接掃描80端口的***

        Listen 8080

    11. 關閉對.htaccess的支持

        AllowOverride All

        改爲

        AllowOverride None

    12. 配置httpd.conf記錄訪問日誌

   5.2httpd2.2基於FQDN虛擬主機配置實驗

        需要注意的地方

        1.註釋/etc/httpd/conf/httpd.conf文件中的 #DocumentRoot

        2.在/etc/httpd/conf.d/*.conf寫入一個虛擬主機的配置文件(示例如下)

[root@god conf.d]#cat /etc/httpd/conf.d/www.conf 
NameVirtualHost 10.0.0.68:80
<VirtualHost 10.0.0.68:80>
    ServerName www1.stux.com
    DocumentRoot "/web/vhosts/www1"
    CustomLog /web/vhosts/www1/access_log combined
    ErrorLog /web/vhosts/www1/error_log
    <Directory "/web/vhosts/www1">
        Options -Indexes -FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
        Deny from 192.168.1.0/24
    </Directory>
    <Location /server-status>
        SetHandler server-status
        AuthType Basic
        AuthName "michael"
        AuthUserFile "/etc/httpd/passwd.conf"
        Require user michael 
    </Location>
</VirtualHost>
<VirtualHost 10.0.0.68:80>
        ServerName www2.stux.com
        DocumentRoot "/web/vhosts/www2"
        CustomLog /web/vhosts/www2/access_log combined
        ErrorLog /web/vhosts/www2/error_log
        <Directory "/web/vhosts/www1">
                Options -Indexes -FollowSymLinks
                AllowOverride None
                Order allow,deny
                Allow from all
        </Directory>
        <Location /server-status>
                SetHandler server-status
                AuthType Basic
                AuthName "michael"
                AuthUserFile "/etc/httpd/passwd.conf"
                Require user michael
        </Location>
</VirtualHost>

        3.使用httpd -t 檢測配置文件語法 

        4. 重啓服務:service httpd restart 

        5.創建相應的文件(僅列出映射到URL的主站點目錄及文件)

[root@god www2]#cat /web/vhosts/www1/index.html 
IP:10.0.0.68
webSite: www1.stuX.com
[root@god www2]#cat /web/vhosts/www2/index.html 
WebSite: www2.stux.com

        6.在主機的配置文件中加入域名解析

            windos:C:\Windows\System32\drivers\etc中hosts

            linux:/etc/hosts

[root@big ~]#cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 big 
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.67 www.ilinux.io www.iunix.io
10.0.0.68 www1.stux.com 
10.0.0.68 www2.stux.com
#10.0.0.110 www.huwho.cn

        7.測試(可使用windows以及linux主機)

wKiom1lE1z6QdgkTAABOSkWbuh4681.png

wKiom1lE12nD60qTAABOUaYm1I0098.png

wKioL1lE126AOCiHAAB4oZrEwcU536.png

wKiom1lE12_RC_XTAAB73GnFwzo698.png

wKiom1lE13DTBqBbAAB8Qi2QVYA515.png

6.httpd2.4實驗
  6.1httpd2.4基於FQDN虛擬主機配置實驗

    1.在/etc/httpd/conf.d/*.conf寫入一個虛擬主機的配置文件(示例如下)

        
[root@localhost ~]# cat /etc/httpd/conf.d/huwho.conf
<VirtualHost *:80>
    DocumentRoot "/web/www/html/vhost1"
    ServerName "www.huwho.cn"
    <Directory "/web/www/html/vhost1">
        Options FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot "/web/www/html/vhost2"
    ServerName "web.huwho.com"
    <Directory "/web/www/html/vhost2">
        Options FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

    2.創建web站點主目錄   

    mkdir /web/www/html/vhost{1..2} -pv

 3.寫入index.html文件  

    echo www.huwho.cn > vhost1/index.html

    echo web.huwho.com > vhost2/index.html

 4.另一臺測試主機寫入域名解析(10.0.0.73)

[root@big ~]#cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 big 
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.67 www.ilinux.io www.iunix.io
10.0.0.68 www1.stux.com 
10.0.0.68 www2.stux.com
10.0.0.110 www.huwho.cn 
10.0.0.110 web.huwho.com

 5.檢測語法

            httpd -t

    6.重啓服務器

            systemctl restart httpd

     7.10.0.0.73主機測試

[root@big ~]#curl www.huwho.cn
    www.huwho.cn
[root@big ~]#curl web.huwho.com
    web.huwho.com

  




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