http-2.2

HTTP-2.2

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:爲路徑時,是否區分大小寫,取決於文件系統
httpd2.2程序環境
    rpm -ql httpd
        /etc/httpd
        /etc/httpd/conf
        /etc/httpd/conf.d
        /etc/httpd/logs
        /etc/httpd/modules
        /etc/httpd/run
        /etc/logrotate.d/httpd
        /etc/rc.d/init.d/htcacheclean
        /etc/rc.d/init.d/httpd
        /etc/sysconfig/htcacheclean
        /etc/sysconfig/httpd
        /usr/lib64/httpd
        /usr/lib64/httpd/modules
        /usr/sbin/apachectl
        /usr/sbin/htcacheclean
        /usr/sbin/httpd
        /usr/sbin/httpd.event
        /usr/sbin/httpd.worker
        /usr/sbin/httxt2dbm
        /usr/sbin/rotatelogs
        /usr/sbin/suexec
        /usr/share/doc/
        /usr/share/man/man8/
        /var/cache/mod_proxy
        /var/lib/dav
        /var/log/httpd
        /var/run/httpd
        /var/www
        /var/www/cgi-bin
        /var/www/error
        /var/www/html
        /var/www/icons
        
    服務腳本:/etc/rc.d/init.d/httpd
    配置文件:
        /etc/sysconfig/httpd
        /etc/httpd/conf/httpd.conf
    服務控制和啓動:
        chkconfig httpd on|off
        service {start|stop|restart|status|configtest|reload} httpd
    站點網頁文檔根目錄:
        /var/www/html
    模塊文件路徑 :
        /etc/httpd/modules
        /usr/lib64/httpd/modules
    主程序文件:
        /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
    3)http協議
        http 協議
            http/0.9, http/1.0, http/1.1, http/2.0
            stateless 無狀態,服務器沒法持續追蹤訪問者來源
        解決http 協議無狀態方法
            cookie 客戶端存放
            session  服務端存放
        http 事務:一次訪問的過程
            請求:request
            響應:response
        協議查看或分析的工具:
            tcpdump
            wireshark
            tshark

1》顯示服務器版本信息
    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
    建議使用 ServerTokens Prod

 2》修改監聽的IP 和Port
    Listen [IP:]PORT
    省略IP表示爲0.0.0.0
    Listen 指令至少一個,可重複出現屢次
        Listen 80
        Listen 8080
    修改監聽socket ,重啓服務進程方可生效

3》持久鏈接
    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

4》MPM(multi-processing module)多路處理模塊。
    prefork, worker, event(試驗階段)
    httpd-2.2不支持同時編譯多個模塊,因此只能編譯時選定一個。
    rpm 安裝的包提供三個二進制程序文件,分別用於實現對不一樣MPM機制的支持。
    1。確認方法:
        ps aux | grep httpd
        默認爲/usr/sbin/httpd, 即prefork
    2。查看靜態編譯的模塊
        httpd -l
    3。查看靜態編譯及動態裝載的模塊
        httpd –M
    4。動態模塊加載時,不需重啓即生效。
    5。動態模塊路徑
        /usr/lib64/httpd/modules/
    6。更換使用的httpd程序:
        vim /etc/sysconfig/httpd
            HTTPD=/usr/sbin/httpd.worker
            重啓服務生效
        pstree -p|grep httpd 查看進程和線程
    7。Httpd 2.4與之不一樣
        以動態模塊方式提供
        配置文件:/etc/httpd/conf.modules.d/00-mpm.conf
        httpd –M |grep mpm
        重啓服務生效
        pstree -p|grep httpd 查看進程和線程
    8。prefork的默認配置
        <IfModule prefork.c>
            StartServers 8
            MinSpareServers 5
            MaxSpareServers 20
            ServerLimit 256  最多進程數, 最大20000
            MaxClients 256  最大併發
            MaxRequestsPerChild  4000 子進程最多能處理的請求數量,在處理MaxRequestsPerChild個請求以後, 子進程將會被父進程終止,這時候子進程佔用的內存就會釋放( 爲0時永遠不釋放)
        </IfModule>
    9。worker的默認配置
        <IfModule worker.c>
            StartServers 4
            MaxClients 300
            MinSpareThreads 25
            MaxSpareThreads 75
            ThreadsPerChild 25
            MaxRequestsPerChild 0  無限制
        </IfModule>
5》DSO:Dynamic Shared Object
        加載動態模塊配置
            vim /etc/httpd/conf/httpd.conf
                配置指定實現模塊加載格式:
                LoadModule <mod_name> <mod_path>
                模塊文件路徑可以使用相對路徑,相對於ServerRoot,默認/etc/httpd
        示例:
            LoadModule auth_basic_module modules/mod_auth_basic.so
6》定義'Main' server 的文檔頁面路徑
            DocumentRoot 「/path」
        文檔路徑映射:
            DocumentRoot 指向的路徑爲URL 路徑的起始位置
        示例:
            DocumentRoot "/app/data「
            http://HOST:PORT/test/index.html --> /app/data/test/index.html
        注意:SELinux 和iptables
7》定義站點主頁面
        DirectoryIndex index.html index.html.var
    
8》站點訪問控制常見機制
    可基於兩種機制指明對哪些資源進行何種訪問控制。
    訪問控制機制有兩種,分別是客戶端來源地址,用戶帳號
    文件系統路徑:
        <Directory 「/path">
        ...
        </Directory>
        <File 「/path/file」>
        ...
        </File>
        <FileMatch "PATTERN">
        ...
        </FileMatch>
    URL 路徑:
        <Location "">
        ...
        </Location>
        <LocationMatch "">
        ...
        </LocationMatch>
    示例:
        <FilesMatch "\.(gif|jpe?g|png)$">
        <Files 「?at.*」> 通配符
        <Location /status>
        <LocationMatch "/(extra|special)/data">
        
9》<Directory> 中「基於源地址」實現訪問控制
        (1) Options:
            後跟1個或多個以空白字符分隔的選項列表,在選項前的+ ,- 表示增長或刪除指定選項。
            常見選項:
                Indexes:指明的URL路徑下不存在與定義的主頁面資源相符的資源文件時,返回索引列表給用戶。
                FollowSymLinks:容許訪問符號連接文件所指向的源文件
                None:所有禁用
                All:所有容許
            示例:
                <Directory /web/docs>
                    Options Indexes FollowSymLinks
                </Directory>
                <Directory /web/docs/spec>
                    Options FollowSymLinks
                </Directory>
                <Directory /web/docs>
                    Options Indexes FollowSymLinks
                </Directory>
                <Directory /web/docs/spec>
                    Options +Includes -Indexes
                </Directory>
        (2) AllowOverride:
            與訪問控制相關的哪些指令能夠放在指定目錄下的.htaccess (由AccessFileName 指定)文件中,覆蓋以前的配置指令,但只對<directory> 語句有效。
            AllowOverride All:全部指令都有效
            AllowOverride None:.htaccess 文件無效
            AllowOverride AuthConfig Indexes:除了AuthConfig和Indexes的其餘指令都沒法覆蓋
        (3) order和allow 、deny
            order:定義生效次序,寫在後面的表示默認法則生效。
                Order allow,deny
                Order deny,allow
            Allow from
            Deny from
                            allow.denv  deny.allow
                only allow  yes         yes
                only deny   no          no
                both        no          yes
                none        no          yes

            來源地址:
                IP
            網絡:
                172.16
                172.16.0.0
                172.16.0.0/16
                172.16.0.0/255.255.0.0
            
        (4)示例:
            <files "*.txt">
                order deny,allow
                deny from 172.16. 100.100
                allow from 172.16
            </files>
            <files "*.txt">
                order allow,deny
                deny from 172.16.100.100
                allow from 172.16
            </files>
    
10》日誌設定
        1。日誌類型:
            訪問日誌
            錯誤日誌
        2。錯誤日誌:
            ErrorLog logs/error_log
            LogLevel warn
            loglevel 可選值:
                debug, info, notice,warn,error,crit,alert,emerg
        3。訪問日誌:
            定義日誌格式:
                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 即表示請求報文的首行,記錄了這次請求的「方法」,"URL"以及協議版本
            %>s  響應狀態碼
            %b  響應報文的大小,單位是字節,不包括響應報文http 首部
            %{Referer}i  請求報文中首部「referer」的值;即從哪一個頁面中的超連接跳轉至當前頁面的
            %{User-Agent}i  請求報文中首部「User-Agent」的值,即發出請求的應用程序

11》設定默認字符集
        AddDefaultCharset UTF-8
        中文字符集:GBK, GB2312, GB18030:wq

12》定義路徑別名
        格式:Alias  /URL/  "/PATH/"
        DocumentRoot "/www/htdocs"
        http://www.m.com/download/bash.rpm ==>/www/htdocs/download/bash.rpm
        Alias /download/ "/rpms/pub/"
            http://www.m.com/rpms/pub/bash.rpm ==>/www/htdocs/download/bash.rpm
        
13》基於用戶的訪問控制
        1。認證質詢:響應碼爲401,拒絕客戶端請求,並說明要求客戶端提供帳號和密碼
        2。認證:客戶端用戶填入帳號和密碼後再次發送請求報文,認證經過時,則服務器發送響應的資源
        3。認證方式兩種:
            basic:明文
            digest:消息摘要認證, 兼容性差
        4。安全域:須要用戶認證後方能訪問的路徑,應該經過名稱對其進行標識,以便於告知用戶認證的緣由。
        5。用戶的帳號和密碼
            虛擬帳號:僅用於訪問某服務時用到的認證標識
            存儲:文本文件,SQL 數據庫,ldap 目錄存儲,nis等
        6。basic 認證配置示例:
            (1)定義安全域
                <Directory 「/path">
                    Options None
                    AllowOverride None
                    AuthType Basic
                    AuthName "Warning!「:隨意寫
                    AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE"
                    Require user username1 username2 ...
                </Directory>
                Require valid-user:全部位於AuthUserFile文件中定義的用戶都容許登陸訪問。
                Require user user1 user2...:僅容許user1,user2等出現AuthUserFile文件中定義的特定幾個用戶登陸,這些用戶爲虛擬用戶,即非系統用戶。
            (2) 提供帳號和密碼存儲(文本文件)
                使用專用命令完成此類文件的建立及用戶管理
                htpasswd [options] /PATH/HTTPD_PASSWD_FILE username
                    -c :自動建立文件,僅應該在文件不存在時使用
                    -m :md5 格式加密
                    -s: sha 格式加密
                    -D :刪除指定用戶
        7。基於組帳號進行認證
            (1)定義安全域
                <Directory 「/path">
                    AuthType Basic
                    AuthName "String「
                    AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE"
                    AuthGroupFile "/PATH/HTTPD_GROUP_FILE"
                    Require group grpname1 grpname2 ...
                </Directory>
            (2)建立用戶帳號和組帳號文件;
                組文件:每一行定義一個組
                GRP_NAME: username1 username2 ...
                示例:
                    <Directory "/www/htdocs/admin">
                        Options None
                        AllowOverride None
                        AuthType Basic
                        AuthName "Administator private"
                        AuthUserFile "/etc/httpd/conf.d/.htpasswd"
                        AuthGroupFile "/etc/httpd/conf.d/.htgroup"
                        Require group webadmins
                    </Directory>
                    vim /etc/httpd/conf.d/.htgroup
                        webadmins:wang mage
            (3)遠程客戶端和用戶驗證的控制
                Satisfy ALL|Any
                    ALL  客戶機IP和用戶驗證都須要經過才能夠
                    Any  客戶機IP和用戶驗證, 有一個知足便可
                示例:
                    Require valid-user
                    Order allow,deny
                    Allow from 192.168.1
                    Satisfy Any
14》虛擬主機
        1。站點標識:socket
            IP 相同,但端口不一樣
            IP 不一樣,但端口均爲默認端口
        2。FQDN 不一樣;
            請求報文中首部
            Host: www.m.com
        3。有三種實現方案:
            基於ip :爲每一個虛擬主機準備至少一個ip 地址
            基於port :爲每一個虛擬主機使用至少一個獨立的port
            基於FQDN :爲每一個虛擬主機使用至少一個FQDN
        4。注意:
            通常虛擬機不要與main主機混用,所以要使用虛擬主機,通常先禁用main主機。
            禁用方法:註釋中心主機的DocumentRoot。
            這是由於其在後面,配置文件中默認是後面的配置會覆蓋前面。
            使用servername時要注意dns問題。
        5。虛擬主機的配置方法:
            <VirtualHost IP:PORT>
                ServerName FQDN
                DocumentRoot 「/path"
            </VirtualHost>
            建議:上述配置存放在獨立的配置文件中
        6。其它可用指令:
            ServerAlias:虛擬主機的別名,可屢次使用
            ErrorLog:錯誤日誌
            CustomLog:訪問日誌
            <Directory 「/path">
            </Directory>
            Alias
        7。基於IP 的虛擬主機示例:
            <VirtualHost 172.16.100.6:80>
                DocumentRoot "/htdocs1"
            </VirtualHost>
            <VirtualHost 172.16.100.7:80>
                DocumentRoot "htdocs2"
            </VirtualHost>
            <VirtualHost 172.16.100.8:80>
                DocumentRoot "htdocs3"
            </VirtualHost>
            注意:
            當你使用httpd -t進行檢查時會出現報錯,而報的錯誤是servername沒有,這個不用在乎,由於沒有寫。
            本機要配上全部ip地址並可以用於通訊。
        8。基於端口的虛擬主機:可和基於IP的虛擬主機混和使用
            listen 808
            listen 8080
            <VirtualHost 172.16.100.6:80>
                ServerName www.a.com
                DocumentRoot "htdocs1"
            </VirtualHost>
            <VirtualHost 172.16.100.6:808>
                ServerName www.b.net
                DocumentRoot "htdocs2"
            </VirtualHost>
            <VirtualHost 172.16.100.6:8080>
                ServerName www.c.org
                DocumentRoot "htdocs3"
            </VirtualHost>
            注意:
            httpd要監聽這裏指明的全部端口。
            使用servername時要注意DNS。
            要不就不使用虛擬機的dns,本身配置好dns。
            要不就使用虛擬機的dns,並在/etc/hosts中配好。
                
        9。基於FQDN的虛擬主機:
            NameVirtualHost *:80,httpd2.4 不須要此指令
            <VirtualHost *:80>
                ServerName www.a.com
                DocumentRoot "htdocs1"
            </VirtualHost>
            <VirtualHost *:80>
                ServerName www.b.net
                DocumentRoot "htdocs2"
            </VirtualHost>
            <VirtualHost *:80>
                ServerName www.c.org
                DocumentRoot "htdocs3"
            </VirtualHost>
            注意:一樣是注意dns。
    
15》status頁面
        LoadModule status_module modules/mod_status.so
        <Location /server-status>
            SetHandler server-status
            Order allow,deny
            Allow from 172.16
        </Location>
        ExtendedStatus On 顯示擴展信息
相關文章
相關標籤/搜索