Apache系列:Apache的全局配置
阿新 • • 發佈:2019-03-12
優點 任務 綁定 信息 per 長連接 sed class 不同的
配置文件組成:
整個配置文件由3段組成: (1)全局配置:對主服務器或虛擬機都有效,且有些功能是服務器自身工作屬性; (2)主服務器:主站屬性; (3)虛擬主機:虛擬主機及屬性定義 註:第二段和第三段(即主機和虛擬主機)不能同時使用;
全局配置
一、配置監聽的地址和端口
Listen [IP:]PORT //Listen可重復使用多次 默認監聽80端口,不加ip,默認監聽服務器上的多個ip地址上的80端口,你可以配置多個網卡,在不同的網卡上配置不同的IP,不管從哪個ip訪問都能被監聽 Listen 192.168.1.22:80:只監聽這個ip地址的80端口
二、DSO與MPM
Apache DSO
apache是一個模塊化設計的服務,核心只包含主要功能,擴展功能通過模塊實現。 不同的模塊的功能和特性都是獨立分開的,這樣擴展性更好,模塊之間依賴性小,利於維護升級和擴展。 不同模塊可以被靜態的編譯進程序,也可以動態加載。 模塊的動態加載通過DSO(Dysnamic Shared Object)實現。
httpd -l :用於查看核心模塊(靜態編譯入程序的模塊)
httpd -M:用於查看當前apache安裝的模塊
MPM(Multi Process Modules)
意為多路處理模塊,也就是我們所說的apache的工作模式。
MPM負責實現網絡監聽,請求的處理等功能、MPM有很多種,目的是為了在不同平臺下實現最優化的性能及穩定性。
共有3種工作模式
prefork:一個主進程產生多個子進程,一個子進程響應一個請求; worker:一個進程生成多個線程,一個線程響應一個請求; event:基於事件驅動;
不同系統下可以使用的MPM:
說明
event在apache2.4版本之前是以測試狀態提供,網上並沒有太多的資料,在更新至2.4版本之後正式上線。 先來說prefork:當httpd啟動起來之後,會生成一個主進程,它負責監聽用戶的請求,一旦請求進來後,它不負責自己響應,而是讓其生成的子進程來響應,而主進程繼續監聽請求。 prefork是非線程,預生成進程型MPM、prefork會預先啟動一些子進程,每個子進程一個時間點只能處理一個請求,並且會根據並發請求數量動態生成更多子進程。 通過子進程對外提供服務,處理請求,但是每個子進程在同時間內只能處理一個任務,這個可以在配置文件中設置。 如果有更多的請求,會自動生成更多的子進程來處理。 worker是線程化,多進程的MPM,每個進程可以生成多個線程,每個線程處理一個請求。 優點:節省資源,每多一個子進程就會多占用系統資源,使用線程處理請求。 apache默認prefork:現在的計算機系統資源還是比較夠用的,使用prefork效率更高,但是如果要修改為 worker,則要重新靜態編譯模塊。 需要考慮的是:剛啟動服務的時候需要創建幾個空閑進程,太多不好太少也不好。最少保證有幾個空閑進程來響應請求進來,這是必須的。 最多設定多少個空閑進程,多余的空閑進程需要回收回來。 所以其有如下幾個關鍵作用: (View Code1)啟動服務時綁定特權端口:Linux系統中,只有管理員有權限使用小於1024的特權端口;但運行一些公共可用的服務,一定不能以管理員身份運行 (2)派發或回收子進程 (3)讀取分析主配置文件 (4)監聽每個用戶請求並且派發子進程
配置prefork模型
apache服務默認就是以Prefork模式啟動,無須更改啟動模式。
參數說明:
<IfModule prefork.c> #如果存在這個模塊,那麽提供以下屬性 StartServers 8 #剛啟動web服務時啟動幾個空閑子進程 MinSpareServers 5 #最少空閑進程數 MaxSpareServers 20 #最大空閑進程數 ServerLimit 256 #限定最多允許並發進來的活動用戶連接個數 MaxClients 256 #服務器所允許同時所連接進來的鏈接數,一般來說與上面保持一致,或者大於上面的數。 MaxRequestsPerChild 4000 #一個服務器進程最多可以處理多少個進程,一旦超出請求後無論如何將進程結束並新啟動新進程 </IfModule> #最後以IfModule結尾
註意:為什麽不能一直用子進程處理去處理請求?
為什麽不能一直用這個子進程處理請求? 1.擔心子進程有內存泄漏,長期工作下會出現bug等問題,持續工作會一直吃系統資源 2.子進程假死狀態,不能正常處理請求 為了保險起見,為了讓apache更穩定,更安全的運行View Code
配置worker模型
更改apache當前工作模式為worker模式
編輯文件/etc/sysconfig/httpd,將以下參數的註釋信息去掉: HTTPD=/usr/sbin/httpd.worker 更改模式後必須重新啟動服務 [root@Centos ~]# service httpd restart 啟動完畢後,查看其進程狀態: [root@Centos ~]# ps -ef | grep http root 1667 1 0 23:43 ? 00:00:00 /usr/sbin/httpd.worker #以root用戶身份生成的父進程(用於派發工作進程) apache 1671 1667 0 23:44 ? 00:00:00 /usr/sbin/httpd.worker #以apache用戶身份運行的工作進程(該工作進程派發線程) apache 1672 1667 0 23:44 ? 00:00:00 /usr/sbin/httpd.worker apache 1673 1667 0 23:44 ? 00:00:00 /usr/sbin/httpd.worker apache 1676 1667 0 23:44 ? 00:00:00 /usr/sbin/httpd.worker
參數說明:
<IfModuleworker.c> StartServers 4 #配置啟動多少個用於監聽的服務,註意:這裏並不是服務器進程,而是線程 MaxClients 300 #最大支持的用戶連接數 MinSpareThreads 25 #最小的空閑線程數 MaxSpareThreads 75 #最大的空閑線程數 ThreadsPerChild 25 #允許每個進程最多生成多少個線程 MaxRequestsPerChild 0 #設置一個獨立的子進程將能處理的請求數量 </IfModule>
3、配置服務器支持keep-alived
KeepAlive {On|Off} :啟用之後支持一次連接可以發多個請求(對於非常繁忙的服務器建議off KeepAliveTimeout 15 : 15秒之後斷開長連接 MaxKeepAliveRequests 50:一次長連接之內最多允許50個請求
4、配置加載的模塊
#LoadModule指令 模塊名稱 模塊所在的路徑(相對於ServerRoot的路徑) LoadModule foo_module modules/mod_foo.so
5、其他常用配置
ServerTokens OS:返回服務器頁腳信息的詳細程度,盡量選擇小信息量(full、major) ServerRoot "/etc/httpd":服務器的配置文件所在 PidFile run/httpd.pid :服務器主進程pid的保存位置 Timeout 60:超時設置,設置短一點好 Include conf.d/*.conf:默認加載模塊的配置文件
Apache系列:Apache的全局配置