http-2.2

来源:https://www.cnblogs.com/shenxm/archive/2018/02/23/8461458.html
-Advertisement-
Play Games

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

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在之前的話 新年過去了,那麼久沒有好好學習,感覺好頹廢,現在就uboot的一些基礎問題做一些筆記,順便分享給大家,不過由於見識有限,如果有不足之處請多多指教。 位置無關?什麼意思?我們先瞭解一些基礎知識。。。。。 我們都知道我們寫的代碼最後是運行在記憶體(SDRAM或者SRAM,通常是SDRAM)中的 ...
  • 新年上班第一天,剛開機就遇到了個小坑,問題是這樣,打開瀏覽器,輸入任何網址都跳轉到本地的一個項目,該項目在本地Apache配置下,監聽的埠是8888,本機訪問的形式是127.0.0.1:8888。 問題截圖(訪問360搜索跳轉到本地127.0.0.1:8888,訪問百度等https協議的功能變數名稱報錯) ...
  • 越來越多的瀏覽器不在支持http協議了,這就要求你為你的網站必須綁定SSL證書。谷歌瀏覽器也將要在今年取消對http協議的支持,申請CA證書迫在眉睫。我購買有兩個功能變數名稱,一個虛擬機,沒事鼓搗鼓搗,圖個樂趣。在阿裡雲申請了免費證書,一直用的好好的。這次過年恰遇證書更新,想一起把所有功能變數名稱都升級到https ...
  • 1.定義整型數據類型INT16U之類取代int,short等與編譯器有關的類型定義,方便移植 2.全局變數的定義 在工裝項目中進行了實踐,每個模塊的代碼對應的頭文件包含對應全局變數,其中使用 #ifdef xxx_模塊 #define xxx_模塊 #else #define xxx_模塊 exte ...
  • 過完年回來, github不安分了, 發了博文說不支持TLSv1/TLSv1.1: Weak cryptographic standards removed, 沒看到這篇博文之前, 還以為是代理問題, 設置過, 還是不行, 還更新到最新的git, 還是不行, 就查了一下TLS協議, 終於通過git的 ...
  • Nginx介紹 nginx nginx的功能 nginx與web 服務相關的功能 nginx的特性 nginx程式架構 nginx 模塊 nginx的功用 nginx的安裝 nginx目錄和命令 nginx優缺點 ...
  • 一、Linux簡單介紹 二、虛擬機Linux中常用介紹 上一篇博文記錄瞭如何在虛擬機中安裝centOS,但是因為使用windows習慣了,所以記錄一下centOS常用的界面圖標 【註意】虛擬機的Linux中有一個比較坑的地方,那就是如果需要大寫,需要按住shift不放,然後輸入字元......筆者因 ...
  • 環境: win10 64位 Virtualbox 5.1.30 ubuntu-16.04.3-server-amd64.iso 1. 安裝好ubuntu後,打開virtualbox安裝路徑文件夾,找到VBoxGuestAdditions.iso(增強包)。如圖: 2. 點擊滑鼠右鍵,選擇裝載,就會看 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...