天天看點

HTTP2.2詳解(二)

http://httpd.apache.org/docs/2.2/  //官方手冊

一、httpd的特性

二、安裝httpd

三、httpd基礎配置詳解

四、詳細實驗

高度子產品化:core + modules

DSO:dynamic share object動态共享對象,支援動态裝解除安裝

MPM:multi process modules:多道處理子產品,決定httpd的工作方式來響應使用者請求

    prefork:多程序模型,每個程序響應一個請求;

        1個主程序:負責[生成/回收]子程序處理使用者請求;負責建立套接字;負責接收請求,并将其派發給某子程序進行并發處理;

        n個子程序:每個子程序處理一個請求

        工作模型:會預先生成幾個空閑程序,随時等待響應使用者請求;定義最大空閑和最小空閑

    worker:多程序多線程模型,每線程處理一個使用者請求

        1個主程序:負責生成子程序;負責建立套接字;負責接收請求,并将其派發給某子程序進行并發處理;

        n個子程序:每個子程序負責生成多個線程

        每個線程,負責響應使用者請求

        并發響應數量:m*n

            m:子程序數量

            n:每個子程序所能建立的最大線程數量

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

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

        http2.2:仍為測試使用模型

        http2.4:event可以直接使用

    ============================================

        prefork 1=n===?      1*n    //每個子程序隻響應1個請求

        worker 1=n=m===?  m*n    //1個子程序響應1個請求

        event    1==n===??  1*n //每個子程序響應多個請求

并發伺服器響應模型:

    單程序模型

    多程序模型

    複用的I/O的模型

        多線程

        事件驅動 

    複用的多程序多線程模型

MPM:2.2和2.4

    prefork:多程序模型,一個主程序,生成n個子程序,一個程序響應一個請求

    worker:多程序多線程模型,一個主程序,生成多個子程序,每個子程序生成多個線程,一個線程響應一個使用者請求

    event:事件驅動模型,多程序模型,一個程序,生成多個子程序,一個程序響應多個請求    

    相同點:都有主程序,都有子程序 //最常見的多道處理子產品機制    

http的程式版本

    httpd 1.3官方已經停止維護

    http2.0,2.4是主流版本

    http2.4目前最穩定

httpd的功能特性

    CGI:common gateway Interface

    虛拟主機:IP,PORT,FQDN

    反向代理:

    負載均衡:

    豐富的使用者認證機制:

            basic

            digest

    支援第三方子產品:

    ...

    rpm包

    編譯安裝:定制新功能,或其他原因

CentOS 6:httpd2.2

    配置檔案:

        /etc/httpd/conf/httpd.conf

        /etc/httpd/conf.d/*.conf

    服務腳本

        /etc/rc.d/init.d/httpd

        腳本配置檔案:/etc/sysconfig/httpd

    主程式檔案:

        /usr/sbin/httpd  //prefork的模型,預設

        /usr/sbin/httpd.event

        /usr/sbin/httpd.worker

        //http2.2這幾個模型,是不支援動态裝解除安裝的

    日志檔案:

        /var/log/httpd

            access_log:通路日志

            error_log:錯誤日志

    站點文檔:

        /var/www/html

    子產品檔案路徑:

        /usr/lib64/httpd/modules/ 

    服務控制

        service

        chkconfig httpd on|off

CentOS 7: httpd2.4 //MPM可以動态裝載

        子產品配置檔案

            /etc/httpd/conf.modules.d/*  根據名字按順序進行加載

    systemd unit file:

        /usr/lib/systemd/system/httpd.service

        基于unit加載服務

    主程式:

        /usr/sbin/httpd //http-2.4支援MPM的動态切換

        /var/www/html            

    服務控制:

        sysemctl {enabled|disable} httpd.service

httpd-2.2常用配置

    httpd.conf //三段

    1.全局配置

    2.主伺服器配置

    3.虛拟主機配置

配置格式:

    directive value 

        directive:不區分大小寫,

        value:一般也不區分大小寫,為路徑時,是否區分字元大小寫,取決于fs

常用配置:

    //cp httpd.conf{,.bak} //建議先備份一下

1.修改監聽的ip和port

    Listen [IP:]PORT 

        1.//省略IP辨別為0.0.0.0;本機所有ip

        2.listen 80 

            listen 8080 //同時在80和8080端口提供服務

        3.修改監聽socket,重新開機服務程序才能生效,reload不能生效

2.持久連結 //

    persistent Connection:TCP連接配接建立後,每個資源擷取完成後,不完全斷開連結,而是繼續等待其他資源請求的進行

    如何斷開?

        數量限制

        時間限制

        副作用:對并發通路量較大的伺服器,長連接配接機制會使得後續某些請求無法得到響應;

        折中:使用較短的持久連結時長,以及較少的請求數量

    KeepAlive On|Off //預設關閉

    MaxKeepAliveRequests 100 //最多請求次數

    KeepAliveTimeout 15 //逾時時間,相當于汽車的3年10w公裡,一樣,隻要滿足其中一樣,就廢棄該程序

3.MPM

    httpd2.2不支援同時編譯多個MPM子產品,是以隻能編譯標明要使用的子產品

        //CentOS所提供的的rpm包同時提供了三個rpm包,但同時隻能使用一個

        httpd:prefork //預設使用的MPM子產品

        httpd.worker:

        httpd.event //分别用于實作對不同的MPM機制的實作,确認現在使用

    ps aux |grep httpd //檢視目前使用的模型

    檢視httpd程式的子產品清單

        1.httpd -l //靜态編譯的子產品

        2.httpd -M //檢視靜态和動态[共享]的所有子產品

    更換其他MPM

        1.service httpd stop

        2.vim /etc/sysconfig/httpd 

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

        3.service httpd start

        4.ps aux |grep httpd

注意:httpd2.2不建議使用event

    而且用線程取代程序,所帶來的的性能提升是有限的

    重新開機服務程序方式可生效

4.

<code>Prefork</code>

<code>    </code><code>&lt;</code><code>IfModule</code> <code>prefork.c&gt;</code>

<code>    </code><code>StartServers       8    //服務啟動程序</code>

<code>    </code><code>MinSpareServers    5    //最小空閑程序</code>

<code>    </code><code>MaxSpareServers   20    //最大保持空閑的程序的數量</code>

<code>    </code><code>ServerLimit      256    //最多允許maxclient啟用多少個程序</code>

<code>    </code><code>MaxClients       256    //最大并發量,就是同時通路數量</code>

<code>    </code><code>MaxRequestsPerChild  4000    //每個程序最多可以處理多少個請求</code>

<code>    </code><code>&lt;/</code><code>IfModule</code><code>&gt;</code>

<code>    </code><code>pv:page view頁面通路單個頁面    </code>

<code>    </code><code>uv:使用者通路量</code>

<code>    </code> 

<code>Worker</code>

<code>    </code><code>&lt;</code><code>IfModule</code> <code>worker.c&gt;</code>

<code>    </code><code>StartServers         4    //随服務啟動程序數</code>

<code>    </code><code>MaxClients         300    //最大并發用戶端連接配接數</code>

<code>    </code><code>MinSpareThreads     25    //最少保留多少空閑線程數量</code>

<code>    </code><code>MaxSpareThreads     75    // 4*25=100&gt;75是以開機隻會啟動3個程序,1個為主程序</code>

<code>    </code><code>ThreadsPerChild     25    //每個程序可以生成的子線程</code>

<code>    </code><code>MaxRequestsPerChild  0    //每個程序最多可以處理多少個請求,能處理多少個,就處理多少個</code>

    watch -n.5 'ps aux |grep httpd' //每0.5s檢測一次

    service httpd restart //剛開始啟動4個,後期會減去一個

5.DSO//動态加載子產品

    配置指定實作子產品

<code>    </code><code>LoadModule &lt;</code><code>mod_name</code><code>&gt; &lt;</code><code>mod_path</code><code>&gt; //子產品名稱相對路徑,相對于ServerRoot路徑,/etc/httpd/</code>

<code>    </code><code>LoadModule disk_cache_module modules/mod_disk_cache.so</code>

<code>    </code><code>LoadModule cgi_module modules/mod_cgi.so</code>

<code>    </code><code>LoadModule version_module modules/mod_version.so</code>

6.定義中心主機的文檔頁面路徑

    隻提供一個站點:

        1.隻提供一個虛拟主機

        2.使用Main server

    文檔路徑映射:DocuemntRoot指向的路徑為URL路徑的起始位置

    DocumentRoot "/var/www/html"  //設定根目錄

7.站點通路控制

    可基于兩種機制指明對哪些資源進行何種通路控制

        檔案系統路徑

        URL路徑

    [FS路徑]/var/www/html/index.html--&gt;[URL路徑]192.168.0.1/index.html

    注意:通路控制實在 &lt;DocumentRoot  /var/www/html&gt;中定義的

    1.單個目錄及其子目錄

        &lt;Directory /&gt;

            Options FollowSymLinks

            AllowOverride None

            ...

        &lt;/Directory&gt;

    2.單個檔案

        &lt;file "" &gt;

        &lt;/file&gt; 

    3.一類檔案

        &lt;FileMatch "PATTERN" &gt;  //比對一類檔案,但是要啟用正規表達式引擎才能使用

        ...

        &lt;/FileMatch&gt;

    4.URL路徑

        &lt;Location "/" &gt;

        &lt;/Location&gt;

        &lt;LocationMatch "/" &gt;

        &lt;/LocationMatch&gt;

    示例:        

        &lt;Directory "/var/www/html"&gt;

            Options Indexes FollowSymLinks 

            Order allow,deny

            Allow from all

        Indexes:指明的URL路徑下不存在于定義的首頁面資源相符的資源檔案時,傳回索引清單給使用者

        FollowSymLinks:

8.定義網站主界面:以及通路控制參數

    DirectoryIndex index.html index.html.var

    重命名index.html ,以及/etc/httpd/conf.d/welcome.conf

    service httpd restart //将看到索引

<code>        </code><code>&lt;</code><code>Directory</code> <code>"/var/www/html"&gt;</code>

<code>            </code><code>Options Indexes FollowSymLinks  //删除indexes将看不到索引</code>

<code>            </code><code>AllowOverride None</code>

<code>            </code><code>Order allow,deny</code>

<code>            </code><code>Allow from all</code>

<code>        </code><code>&lt;/</code><code>Directory</code><code>&gt;</code>

    修改後再次檢視:forbidden

    1.Options Indexes FollowSymLinks

        Indexes :是否允許索引

        FollowSymlinks:是否跟随符号連結到源檔案

        SymLinksifOwnerMatch:連結檔案的屬主和目标檔案的屬主相同時

        ExecCGI:允許執行cgi腳本

        MultiViews:是否允許内容協商

        None:都不

        All:所有都允許

      Options None 最好

    2.AllowOverride None //允許覆寫?    

        與通路控制相關的哪些指令可以放在.htaccess檔案(每個目錄下都可以有一個)

        All //所有都可以放進去

        None:

        Authconfig

        Limit

        FileInfo

        //對目錄通路的映像特别打,是以不建議使用

    3.Order allow,deny //誰可以通路,先比對allow規則,後比對deny規則,後面的為預設法則

      Allow from all

        來源位址:

            IP:

            NetAddr:

                172.16

                172.16.0.0

                172.16.0.0/16

                172.16.0.0/255.255.0.0

9.定義路徑别名

    Alias /download/ "/rpms/pub"

        http://wwww.baidu.com/download/a.txt 

        /rpms/pub/a.txt 

    格式:

        Alias /URL/ "/Path/to/some_resource"

10.設定預設字元集

    AddDefaultCharset UTF-8

    中文字元集:GBK, GB2312, GB18030

11.日志

    日志類型:通路日志和錯誤日志

        通路日志:

        錯誤日志:

    錯誤日志:

        ErrorLog logs/error_log

        LogLevel warn

        LogLevel級别:debug, info, notice, warn, error, crit, alert, emerg.

                當定義到某一個級别的時候:比這個級别高的都要記錄

        LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedLogFormat "%h %l %u %t \"%r\" %&gt;s %b" common

        LogFormat "%{Referer}i -&gt; %U" referer

        LogFormat "%{User-agent}i" agent

    通路日志:

        CustemLog logs/access_log combined

                    日志檔案        日志格式

<code>        </code><code>日志格式中的宏或者其他定義:</code>

<code>        </code><code>http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats</code>

<code>        </code><code>%h:client的IP位址</code>

<code>        </code><code>%l:Remote User:通常為一個減号("-")</code>

<code>        </code><code>%u:Remote User(from auth;) 非為登入通路時,其為一個減号</code>

<code>        </code><code>$t:伺服器收到請求時的時間</code>

<code>        </code><code>%r:first line of request,表示請求封包的首行;記錄了請求的“方法”,“URL"以及協定版本号</code>

<code>        </code><code>%&gt;s:響應狀态碼</code>

<code>        </code><code>%b:響應封包的大小,bytes,不包含http首部</code>

<code>        </code><code>%{Referer}i:請求封包中首部"Referer"的值;即從哪個頁面中的超連結跳轉至目前頁面的;</code>

<code>        </code><code>%(User-Agent);請求封包中首部"User-Agent"的值,即送出請求的程式</code>

12.基于使用者的通路控制

    網站中提供的認證:

        1.表單認證

        2.http協定自身提供的認證

    使用者認證的過程發送的賬号和密碼是明文發送的

    認證質詢:www.Authenticate:響應碼為401,拒絕用戶端請求,并說明要求client提供賬号和密碼

    認證:Authentication:用戶端使用者填入賬号和密碼後再次發送請求封包;認證通過時,則伺服器發送響應的資源

    認證方式:

        basic:明文

        digest:消息摘要認證

    安全域:需要使用者認證後才能通路的路徑;應該通過名稱對其進行辨別,以便于告知使用者認證的原因

    使用者的賬号和密碼存放于何處:

        虛拟賬号:僅用于通路某網絡服務時用到認證辨別

        存儲:

            文本檔案;

            SQL資料庫;

            ldap目錄存儲:

    basic認證示例:

        1.定義安全域

<code>            </code><code>&lt;Directory </code><code>""</code> <code>&gt;</code>

<code>                </code><code>Options None</code>

<code>                </code><code>AllowOverride None </code><code>//其他定義的</code>

<code>                </code><code>AuthType Basic</code>

<code>                </code><code>AuthName </code><code>"String"</code>

<code>                </code><code>AuthUserFIle "/path/to/httpd_passwd“</code>

<code>                </code><code>require user username1 username2 ...</code>

<code>                </code><code>...</code>

<code>            </code><code>&lt;/Directory&gt;</code>

<code>            </code><code>Require valid-user </code><code>//允許所有使用者</code>

        2.提供賬号和密碼存儲(文本檔案)

13.虛拟主機

    站點辨別:socket

        IP相同:但端口不同

        IP不同:但端口相同80/443

        FQDN不同:端口和IP相同

            請求封包中首部 //對應的是FQDN

            Host:www.mt.com

    三種實作方案:

        基于ip:為每個虛拟主機至少準備一個ip位址

        基于port:為每個虛拟使用至少一個獨立Port

        基于FQDN:為每個虛拟主機使用至少一個FQDN

    注:一般虛拟主機不和中心主機混用,二者選其一

        禁用方法:注釋中心主機DocumentRoot指令即可

    虛拟主機的配置方法:

        &lt;VirtualHost IP:PORT&gt;

            ServerName FQDN

            DocumentRoot " "

        &lt;/VirtualHost&gt;

        其他可用指令:

            ServerAlias:虛拟主機的别名,可使用多次

            ErrorLog:專用的錯誤日志

            CustomLog:

            &lt;Directory ...&gt;

                ...

            &lt;/Directory&gt;

            Alias 等 //在中心主機中實用的都可以在中心主機上使用

14.status頁面 //不能随意允許使用者通路

<code>    </code><code>1.vim httpd.conf 加載子產品</code>

<code>      </code><code>LoadModule status_module modules/mod_status.so</code>

<code>        </code><code>&lt;Location /server-status&gt;</code>

<code>            </code><code>SetHandler server-status</code>

<code>            </code><code>Order deny,allow</code>

<code>            </code><code>Allow </code><code>from</code> <code>all</code>

<code>        </code><code>&lt;/Location&gt;</code>

<code>        </code><code>httpd -t</code>

<code>        </code><code>service httpd reload        </code>

<code>    </code><code>2.http:</code><code>//192.168.4.109/server-status</code>

<code>    </code><code>"_"</code> <code>Waiting </code><code>for</code> <code>Connection, </code><code>"S"</code> <code>Starting up, </code><code>"R"</code> <code>Reading Request,</code>

<code>    </code><code>"W"</code> <code>Sending Reply, </code><code>"K"</code> <code>Keepalive (read), </code><code>"D"</code> <code>DNS Lookup,</code>

<code>    </code><code>"C"</code> <code>Closing connection, </code><code>"L"</code> <code>Logging, </code><code>"G"</code> <code>Gracefully finishing,</code><code>//等待所有請求完成後,關閉連接配接</code>

<code>    </code><code>"I"</code> <code>Idle cleanup of worker, </code><code>"."</code> <code>Open slot with no current process</code>

前提:

    setenforce 0 //關閉selinux

    iptables -F //清空防火牆規則,防止幹擾實驗

實驗1.basic認證

    1.vim httpd.conf

<code>        </code><code>&lt;Directory </code><code>"/var/www/html/admin"</code><code>&gt;</code>

<code>                </code><code>AllowOverride None</code>

<code>                </code><code>AuthName </code><code>"動感地帶 Enter Your name"</code> <code>//提示資訊</code>

<code>                </code><code>AuthUserFile </code><code>"/etc/httpd/conf/.htpasswd"</code>

<code>                </code><code>Require user tom</code>

<code>        </code><code>&lt;/Directory&gt;</code>

        httpd -t //檢查文法,測試目錄中的檔案字尾要是.html ,否則會出現登入後“forbidden"

    2.建立密碼檔案

        htpasswd -c -m  .htpasswd tom //第一次用-c,第二次千萬不要用-c

        htpasswd -m  .htpasswd wolf // tom,wolf,jerry

            -m :md5加密存放

            -D:删除使用者

            -s:sha加密

        Require valid-user //任意使用者都可以

    3.基于組認證 //失敗

<code>        </code><code>AuthUserFile </code><code>"/etc/httpd/conf/.htpasswd"</code>

<code>        </code><code>1.AuthGroupFile </code><code>"/path/to/grouop_file"</code>

<code>        </code><code>2.Require </code><code>group</code> <code>Group1 group2</code>

<code>        </code><code>3.建立使用者賬号群組賬号檔案</code>

<code>            </code><code>組檔案:每一行定義一個組</code>

<code>                </code><code>GRP_name:username1 username2 ... </code><code>//如此簡單</code>

        4.require valid_user //允許任意使用者通路

    AuthType隻有兩個:Basic和Diget

        mod_auth_basic  and  by mod_auth_digest

基于組的認證:

<code>    </code><code>&lt;Directory </code><code>""</code><code>&gt;</code>

<code>        </code><code>Options None</code>

<code>        </code><code>AllowOverride None</code>

<code>        </code><code>AuthType Basic</code>

<code>        </code><code>AuthName "String“</code>

<code>        </code><code>AuthUserFile  </code><code>"/PATH/TO/HTTPD_USER_PASSWD_FILE"</code>

<code>        </code><code>AuthGroupFile </code><code>"/PATH/TO/HTTPD_GROUP_FILE"</code>

<code>        </code><code>Require  </code><code>group</code>  <code>grpname1  grpname2 ...</code>

<code>    </code><code>&lt;/Directory&gt;        </code>

<code>&lt;Directory /</code><code>var</code><code>/www/html/upload/&gt;</code>

<code>    </code><code>Options None</code>

<code>    </code><code>AllowOverride None</code>

<code>    </code><code>AuthType Basic</code>

<code>    </code><code>AuthName </code><code>"Admin Realm"</code>

<code>    </code><code>AuthUserFile </code><code>"/etc/httpd/conf/.htpasswd"</code>

<code>    </code><code>AuthGroupFile </code><code>"/etc/httpd/conf/.htgroup"</code>

<code>    </code><code>Require </code><code>group</code> <code>mygroup</code>

<code>&lt;/Directory&gt;</code>

<code>[root@httpd conf]# cat ./.htgroup    </code>

<code>mygroup: tom Jason</code>

<code>othergroup: obama</code>

實驗2:虛拟主機 //一個主機上存放多個網站

一.基于不同ip的虛拟主機 //三個站點使用同一個ip,同一個端口,不同域名

    1.:192.168.4.110/109/111

<code>        </code><code>mkdir -pv /www/{a.com,b.net,c.org}/hdocs</code>

<code>        </code><code>echo </code><code>"a.com"</code> <code>&gt; /www/a.com/hdocs/index.html</code>

<code>        </code><code>echo </code><code>"c.org"</code> <code>&gt; /www/c.org/hdocs/index.html</code>

<code>        </code><code>echo </code><code>"b.net"</code> <code>&gt; /www/b.net/hdocs/index.html</code>

    2.vim httpd.conf

        #DocumentRoot "/var/www/html" //注釋

        建議建立另外一個檔案

<code>        </code><code>vim /etc/httpd/conf.d/virhosts.conf</code>

<code>            </code><code>&lt;</code><code>VirtualHost</code> <code>192.168.4.109:80&gt;</code>

<code>                </code><code>ServerName www.a.com</code>

<code>                </code><code>DocumentRoot "/www/a.com/hdocs"</code>

<code>            </code><code>&lt;/</code><code>VirtualHost</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>VirtualHost</code> <code>192.168.4.110:80&gt;</code>

<code>                </code><code>ServerName www.b.net</code>

<code>                </code><code>DocumentRoot "/www/b.net/hdocs"</code>

<code>            </code><code>&lt;</code><code>VirtualHost</code> <code>192.168.4.111:80&gt;</code>

<code>                </code><code>ServerName www.c.org</code>

<code>                </code><code>DocumentRoot "/www/c.org/hdocs"</code>

    httpd -t //檢查文法

警告資訊:

<code>[root@localhost conf.d]# httpd -t</code>

<code>[Fri Nov 24 07:51:47 2017] [warn] VirtualHost 192.168.154.132:80 overlaps with VirtualHost 192.168.154.132:80, the first has precedence, perhaps you need a NameVirtualHost directive</code>

<code>[Fri Nov 24 07:51:47 2017] [warn] NameVirtualHost *:80 has no VirtualHosts</code>

<code>Syntax OK</code>

<code>[root@localhost conf.d]# cat virtualhost.conf </code>

<code>NameVirtualHost 192.168.154.132:80</code>

<code>&lt;VirtualHost 192.168.154.132:80&gt;</code>

<code>    </code><code>Servername wwww.a.com </code>

<code>    </code><code>DocumentRoot </code><code>"/var/www/html/a.com"</code>

<code>&lt;/VirtualHost&gt;</code>

<code>    </code><code>Servername wwww.b.net </code>

<code>    </code><code>DocumentRoot </code><code>"/var/www/html/b.net"</code>

<code>    </code><code>Servername wwww.c.org </code>

<code>    </code><code>DocumentRoot </code><code>"/var/www/html/c.org"</code>

//改成這樣,或者把ip位址,改為* 就不會出警告資訊了

二.    基于端口 //三個站點,同一個ip,不同端口,不同域名

    ifconfig eth0:0 down //建議把那幾個虛拟斷開都關了

<code>    </code><code>vim vhosts.conf</code>

<code>        </code><code>Listen 888</code>

<code>        </code><code>Listen 8888</code>

<code>        </code><code>&lt;VirtualHost 192.168.4.109:80&gt;</code>

<code>            </code><code>ServerName www.a.com</code>

<code>            </code><code>DocumentRoot </code><code>"/www/a.com/hdocs"</code>

<code>        </code><code>&lt;/VirtualHost&gt;</code>

<code>        </code><code>&lt;VirtualHost 192.168.4.109:888&gt;</code>

<code>            </code><code>ServerName www.b.net</code>

<code>            </code><code>DocumentRoot </code><code>"/www/b.net/hdocs"</code>

<code>        </code><code>&lt;VirtualHost 192.168.4.109:8888&gt;</code>

<code>            </code><code>ServerName www.c.org</code>

<code>            </code><code>DocumentRoot </code><code>"/www/c.org/hdocs"</code>

    httpd -t

    service httpd restart

    注意:基于端口和基于ip可以混合使用

三.基于FQDN  //同端口,同ip,不同域名

    1.修改配置

<code>        </code><code>NameVirtualHost 192.168.4.109:80</code>

<code>        </code><code>&lt;</code><code>VirtualHost</code> <code>192.168.4.109:80&gt;</code>

<code>        </code><code>&lt;/</code><code>VirtualHost</code><code>&gt;</code>

    2.修改自己的host檔案,或者改為自己建立的dns            

        vim hosts

            192.168.4.109 www.a.org 

            192.168.4.109 www.b.net 

            192.168.4.109 www.c.org

IP:        不同ip,不同域名,端口号可以相同,也可以不同

Port:    同一ip,不同端口,不同域名

FQDN:    同一ip,同一端口,不同域名

實驗3:keepalive的測試

1.另外一條機器安裝telnet,模拟通路server:192.168.4.109

    telnet 192.168.4.109 80

    GET /index.html HTTP/1.1  //不行的話,可以HTTP/1.0

    Host: 192.168.4.109

    兩個回車

2.KeepAlive On        

    service httpd reload

    再次測試,擷取到資料後,不會立即斷開

    預設逾時時間15s,    

keepalive具體可以參考:http://blog.csdn.net/zlxfogger/article/details/44919995

附件:修改alias但是不能通路,alias對應的路徑

    Alias /tt/ "/tmp/test/"   //放在DocumentRoot之前就可以了

    DocumentRoot "/var/www/html" 

附件:Could not reliably determine the server's fully quality

    vim httpd.conf

    ServerName MT:80  //主機名為MT

書籍推薦:&lt;http協定權威指南&gt;

小結:httpd配置

    Listen [IP:]PORT

    持久連結:

        KeepAlive [On|Off]

    MPM:

        prefork,worker,event

    DSO: LoadModule 

        httpd -l/-M

    DocumentRoot

    通路控制

        1.&lt;Directory&gt; 

            Options Indexes FollowSymLinks

            Order Allow Deny

            Allow from

            Deny from

        2.&lt;Location&gt;

            &lt;Location /server-status&gt;

                SetHandler server-status

                Order deny,allow

                Allow from all

            &lt;/Location&gt;

    定義預設首頁面

        DirectoryIndex

    ErrorLog

    CustomLog

    LogFormat

        %{Referer}i:引用Referer首部的資訊

    Alias /URL/  "/path/to/somedir/"  //斜線雙方要麼有,要麼都沒有

    AddDefaultCharset

    基于使用者通路控制

        認證方式:basic,digest //主要使用basic

        AuthType Basic

        AuthName “STIRNG“

        AuthUserFile 

        AuthGroupFile

        Require user/group/valid-user //valid有效的,正當的

        .htpasswd

            htpasswd 

    虛拟主機:IP,Port,FQDN

本文轉自MT_IT51CTO部落格,原文連結:http://blog.51cto.com/hmtk520/2044059,如需轉載請自行聯系原作者

上一篇: Response對象
下一篇: Session對象