1. 程式人生 > >http-2.2

http-2.2

登錄 數據庫 quest sha warn apache 啟用 密碼 裝載

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 顯示擴展信息

http-2.2