天天看點

Linux學習之路--http-2基礎設定及通路限制【15】---20180108

一、HTTP軟體

1、http伺服器應用

http伺服器程式

    httpd apache

    nginx

    lighttpd

應用程式伺服器

    IIS .asp

    tomcat .jsp

    jetty 開源的servlet容器,基于Java的web容器

    Resin CAUCHO公司,支援servlets和jsp的引擎

    webshpere(IBM), weblogic(BEA), jboss,oc4j(Oracle)

市場占有率統計

    www.netcraft.

2、httpd介紹

httpd(主程式名字)

    20世紀90年代初,國家超級計算機應用中心NCSA開發

    1995年開源社群釋出apache(名字簡稱 a patchy server)

        ASF: Apache Software Foundation(特意成立的基金會)

        FSF:Free Software Foundation(自由軟體基金會)

特性:

    高度子產品化:core + modules (子產品開發模式,核心加子產品)

    DSO: Dynamic Shared Object 動态加/解除安裝

    MPM:multi-processing module多路處理子產品

3、MPM工作模式

prefork:多程序I/O模型,每個程序響應一個請求,預設模型

    一個主程序:生成和回收n個子程序,建立套接字,不響應請求

    多個子程序:工作work程序,每個子程序處理一個請求;系統初始時,預先生成多個空閑程序,等待請求,最大不超過1024個

worker:複用的多程序I/O模型,多程序多線程,IIS使用此模型

    一個主程序:生成m個子程序,每個子程序負責生個n個線程,每個線程響應一個請求,并發響應請求:m*n

event:事件驅動模型(worker模型的變種)

    一個主程序:生成m個子程序,每個程序直接響應n個請求,并發響應請求:m*n,有專門的線程來管理這些keep-alive類型的線程,當有真實請求時,将請求傳遞給服務線程,執行完畢後,又允許釋放。這樣增強了高并發場景下的請求處理能力

        httpd-2.2: event 測試版,centos6預設

        httpd-2.4:event 穩定版,centos7預設

Linux學習之路--http-2基礎設定及通路限制【15】---20180108
Linux學習之路--http-2基礎設定及通路限制【15】---20180108
Linux學習之路--http-2基礎設定及通路限制【15】---20180108

4、程序角色

監聽 --> 工作 --> 隊列空閑

Linux學習之路--http-2基礎設定及通路限制【15】---20180108

5、httpd功能特性

虛拟主機(通常一個網站在一個伺服器上,但如果網絡通路量不大,可以在一個伺服器上運作多個網站,就叫虛拟主機)

    具體實作通過修改下列三項進行建設虛拟主機

    IP、Port、FQDN

CGI:Common Gateway Interface,通用網關接口

    httpd處理不了的事物可以轉發給能處理的機器上去,就是通過通用網關接口完成的

反向代理

    根據使用者的請求,把使用者排程到相應的伺服器上

負載均衡

路徑别名

豐富的使用者認證機制

    basic    -->不加密認證

    digest   -->加密認證,但相容性較差,有部分浏覽器不支援

支援第三方子產品

二、Httpd安裝

1、安裝方法

版本

    CentOS 6: 2.2

    CentOS 7: 2.4

安裝方式:

    rpm:centos發行版,穩定,建議使用

    編譯:定制或特殊需求

CentOS 6程式資訊:

    httpd-2.2

    配置檔案位置:

        /etc/httpd/conf/httpd.conf

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

    檢查配置文法:

        httpd –t

        service httpd configtest

2、CentOS 6 httpd程式環境 

服務腳本(啟動腳本):/etc/rc.d/init.d/httpd

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

服務控制和啟動:

    chkconfig httpd on|off

    service {start|stop|restart|status|configtest|reload} httpd

站點網頁文檔根目錄:

    /var/www/html

子產品檔案路徑:

    /etc/httpd/modules

    /usr/lib64/httpd/modules

主程式檔案(MPM模式檔案):

    /usr/sbin/httpd(預設模式)

    /usr/sbin/httpd.worker

    /usr/sbin/httpd.event

主程序檔案:

    /etc/httpd/run/httpd.pid

日志檔案目錄:

    /var/log/httpd

    access_log: 通路日志

    error_log:錯誤日志

幫助文檔包:

    httpd-manual

三、Httpd 2.2常見配置

1、httpd配置檔案的組成

# grep "Section" /etc/httpd/conf/httpd.conf

    配置檔案的主要内容分成三個部分

    ### Section 1: Global Environment              --->全局環境

    ### Section 2: 'Main' server configuration     --->主伺服器設定

    ### Section 3: Virtual Hosts                   --->虛拟主機

配置格式:directive value                          --->類似于鍵值對或者前面是關鍵字|變量|指令後面是一個值

    directive: 不區分字元大小寫

    value: 為路徑時,是否區分大小寫,取決于檔案系統

2、顯示伺服器版本資訊

ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full

ServerTokens Prod[uctOnly]:              Server: Apache

ServerTokens Major:                      Server: Apache/2

ServerTokens Minor:                      Server: Apache/2.0

ServerTokens Min[imal]:                  Server: Apache/2.0.41

ServerTokens OS:                         Server: Apache/2.0.41 (Unix)

ServerTokens Full (or not specified):    Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2

This setting applies to the entire server and cannot be enabled or disabled on a virtualhost-by-virtualhost basis.

     #此設定适用于整個伺服器,并且不能基于虛拟主機虛拟主機啟用或禁用該設定

After version 2.0.44, this directive also controls the information presented by the ServerSignature directive.

     #在版本2.0.44之後,該指令還控制由ServerSignature指令提供的資訊。

建議使用:ServerTokens Prod

3、修改監聽的IP和Port

Listen [IP:]PORT

    (1) 省略IP表示為本機所有IP

    (2) Listen指令至少一個,可重複出現多次

    Listen 80

    Listen 8080

示例:

    Listen 192.168.1.100:8080    ---> 8080這個端口,隻能用這個ip段通路

    Lsten 80

4、持久連接配接

Persistent Connection:連接配接建立,每個資源擷取完成後不會斷開連接配接,而是繼續等待其它的請求完成,預設關閉持久連接配接

    斷開條件:數量限制:100

        時間限制:以秒為機關, httpd-2.4 支援毫秒級

    副作用:對并發通路量較大的伺服器,持久連接配接功能會使用有些請求得不到響應

    折衷:使用較短的持久連接配接時間

設定:

    KeepAlive On|Off

    KeepAliveTimeout 15

    MaxKeepAliveRequests 100

測試:

    telnet WEB_SERVER_IP PORT

    GET /URL HTTP/1.1

    Host: WEB_SERVER_IP

5、MPM( Multi-Processing Module)多路處理子產品

prefork, worker, event(試驗階段)

httpd-2.2不支援同時編譯多個子產品,是以隻能編譯時標明一個

    rpm安裝的包提供三個二進制程式檔案,分别用于實作對不同MPM機制的支援

确認方法:

    ps aux | grep httpd

    預設為/usr/sbin/httpd, 即prefork模式

檢視子產品清單

檢視靜态編譯的子產品

    httpd -l

檢視靜态編譯及動态裝載的子產品

    httpd –M

動态子產品加載:不需重新開機即生效

動态子產品路徑

    /usr/lib64/httpd/modules/

更換使用的httpd程式:

/etc/sysconfig/httpd

    HTTPD=/usr/sbin/httpd.worker

    重新開機服務生效

    pstree -p|grep httpd 檢視程序和線程

Httpd 2.4 與之不同

    以動态子產品方式提供

    配置檔案:/etc/httpd/conf.modules.d/00-mpm.conf

    httpd –M |grep mpm

prefork的預設配置:

    <IfModule prefork.c>

    StartServers                8                                    --->預設啟動服務的子程序數量

    MinSpareServers             5                                    --->最小的空閑線程

    MaxSpareServers             20                                   --->最大的空閑線程

    ServerLimit                 256                                  --->最多程序數,最大20000

    MaxClients                  256                                  --->最大并發 

    MaxRequestsPerChild         4000                                 --->伺服器程序提供的最大請求數

    </IfModule>

    #4000是子程序最多能處理的請求數量。在處理MaxRequestsPerChild 個請求之後,子程序将會被父程序終止,這時候子程序占用的記憶體就會釋放(為0時永遠不釋放)

worker的預設配置:

    <IfModule worker.c>

    StartServers                4                                    --->預設啟動服務的子程序數量

    MaxClients                  300                                  --->最大通路客戶數量(最多支援300個用戶端并發通路)

    MinSpareThreads             25                                   --->最小的空閑線程

    MaxSpareThreads             75                                   --->最大的空閑線程

    ThreadsPerChild             25                                   --->每個子程序帶的線程數量

    MaxRequestsPerChild         0 無限制                             --->伺服器程序提供的最大請求數

壓力測試r軟體包

6、DSO: Dynamic Shared Object

動态共享對象

加載動态子產品配置

    /etc/httpd/conf/httpd.conf

    配置指定實作子產品加載格式:

        LoadModule <mod_name> <mod_path>

    子產品檔案路徑可使用相對路徑:

        相對于ServerRoot(預設/etc/httpd)

    LoadModule auth_basic_module modules/mod_auth_basic.so

7、定義'Main' server的文檔頁面路徑(主目錄)

DocumentRoot “/path”

文檔路徑映射:

DocumentRoot指向的路徑為URL路徑的起始位置

    DocumentRoot "/app/data“

    http://HOST:PORT/test/index.html --> /app/data/test/index.html

注意:SELinux和iptables的狀态

8、定義站點首頁面

DirectoryIndex index.html index.html.var

服務預設找文檔頁面路徑下這兩個格式的檔案

9、站點通路控制常見機制

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

    用戶端來源位址

    使用者賬号

檔案系統路徑:

    <Directory “/path">                                --->針對特定的目錄

    ...                                                 --->需要是這裡制定的ip或者使用者才能通路

    </Directory>

    <File “/path/file”>                               --->或者針對檔案控制

    ...

    </File>

    <FileMatch "PATTERN">                               --->正規表達式控制

    </FileMatch>

URL路徑:

    <Location "">                                       --->特定的URL路徑,進行控制

    </Location>

    <LocationMatch "">

    </LocationMatch>

    <FilesMatch "\.(gif|jpe?g|png)$">                   --->字尾為gif、jpeg、jpg、png的檔案為比對條件

    <Files “?at.*”>                                     通配符

    <Location /status>

    <LocationMatch "/(extra|special)/data">

10、<Directory>中“基于源位址”實作通路控制

 (1) Options:後跟1個或多個以空白字元分隔的選項清單

    在選項前的+,- 表示增加或删除指定選項

常見選項:

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

    FollowSymLinks:允許通路符号連結檔案所指向的源檔案

    None:全部禁用

    All: 全部允許

    <Directory /web/docs>

        Options Indexes FollowSymLinks                 --->在這個目錄下支援索引清單

    <Directory /web/docs/spec>

        Options FollowSymLinks

        <Directory /web/docs>

            Options Indexes FollowSymLinks

        </Directory>

        <Directory /web/docs/spec>

            Options +Includes -Indexes

(2) AllowOverride

    與通路控制相關的哪些指令可以放在指定目錄下的.htaccess(由AccessFileName指定)檔案中,覆寫之前的配置指令

    隻對<directory>語句有效

    AllowOverride All: 所有指令都有效

    AllowOverride None:.htaccess 檔案無效

    AllowOverride AuthConfig Indexes 除了AuthConfig 和Indexes的其它指令都無法覆寫

(3) order和allow、deny

    放在directory, .htaccess中

    order:定義生效次序;寫在後面的表示預設法則

        Order allow,deny

        Order deny,allow

    Allow from和Deny from:定義用戶端位址

        用戶端位址:

            IP                                           --->IP位址

            網絡:   172.16                               --->網段模式

                    172.16.0.0                           

                    172.16.0.0/16

                    172.16.0.0/255.255.0.0

     如果拒絕和允許沖突,以最後面的條件優先級高。

判斷條件

allow、deny

deny、allow

allow only

allow

deny only

deny

allow deny

none

注意:設定條件多的,放在後面

    <files "*.txt">

        order deny,allow

        deny from 172.16. 100.100

        allow from 172.16

    </files>

        order allow,deny

        deny from 172.16.100.100

Linux學習之路--http-2基礎設定及通路限制【15】---20180108
Linux學習之路--http-2基礎設定及通路限制【15】---20180108
Linux學習之路--http-2基礎設定及通路限制【15】---20180108

11、日志設定

日志類型:

    通路日志

    錯誤日志

錯誤日志:

    ErrorLog logs/error_log

    LogLevel warn

    LogLevel 可選值:

        debug, info, notice, warn,error

        crit, alert, emerg

通路日志:

    定義日志格式:LogFormat format strings

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

    使用日志格式:

        CustomLog logs/access_log combined

    參考幫助:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

      %h 用戶端IP位址

      %l 遠端使用者,啟用mod_ident才有效,通常為減号“-”

        %u 驗證(basic,digest)遠端使用者,非登入通路時,為一個減号“-”

        %t 伺服器收到請求時的時間

        %r First line of request,即表示請求封包的首行;記錄了此次請求的“方法”,“URL”以及協定版本

        %>s 響應狀态碼

        %b 響應封包的大小,機關是位元組;不包括響應封包http首部

        %{Referer}i 請求封包中首部“referer”的值;即從哪個頁面中的超連結跳轉至目前頁面的

        %{User-Agent}i 請求封包中首部“User-Agent”的值;即送出請求的應用程式

12、設定預設字元集

AddDefaultCharset UTF-8

中文字元集:GBK, GB2312, GB18030

13、定義路徑别名

格式:

    Alias /URL/ "/PATH/"

    DocumentRoot "/www/htdocs"

        http://www.magedu.com/download/bash.rpm ==> /www/htdocs/download/bash.rpm

        http://www.magedu.com/images/logo.png   ==> /www/htdocs/images/logo.png

    Alias /download/ "/rpms/pub/"

        http://www.magedu.com/download/bash.rpm ==> /rpms/pub/bash.rpm

繼續閱讀