系統(tǒng)運(yùn)維
一.編譯安裝apache2.4.23博文結(jié)構(gòu)
創(chuàng)新互聯(lián)長(zhǎng)期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為本溪企業(yè)提供專(zhuān)業(yè)的網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站,本溪網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
安裝apache
工作模式
新版本的 httpd-2.4 新增以下特性;
新增模塊; mod_proxy_fcgi(可提供 fcgi 代理)
mod_ratelimit(限制用戶帶寬)
mod_request(請(qǐng)求模塊,對(duì)請(qǐng)求做過(guò)濾)
mod_remoteip(匹配客戶端的 IP 地址)
對(duì)于基于 IP 的訪問(wèn)控制做了修改,不再支持 allow,deny,order 機(jī)制,而是統(tǒng)一使用 require 進(jìn)行
新增以下幾條新特性;
1、MPM 支持在運(yùn)行時(shí)裝載;不過(guò)要開(kāi)啟這種特性,在編譯安裝要啟用這三種功能; --enable-mpms-shared=all --with-mpm=event
2、支持 event
3、支持異步讀寫(xiě)
4、在每個(gè)模塊及每個(gè)目錄上指定日志級(jí)別
5、增強(qiáng)版的表達(dá)式分析器
6、每請(qǐng)求配置:<If>, <Elseif>
7、毫秒級(jí)別的 keepalive timeout
8、基于 FQDN 的虛擬主機(jī)不再需要 NameVirtualHost 指令
9、支持使用自定義變量
下載源碼包
注:apr(Apache Portable Runtime)Apache 可移植運(yùn)行庫(kù),它是一個(gè)對(duì)操作系統(tǒng)調(diào)用的抽 象庫(kù),用來(lái)實(shí)現(xiàn) Apache 內(nèi)部組件對(duì)操作系統(tǒng)的使用,提高系統(tǒng)的可移植性。 安裝 apr 和 apr-util
解壓縮[root@localhost media]# ls
apr-1.5.2.tar.gz cronolog-1.6.2.tar.gz openssl-1.0.1u.tar.gz
apr-util-1.5.4.tar.gz httpd-2.4.23.tar.gz pcre-8.39.tar.gz
[root@localhost media]# tar zxf apr-1.5.2.tar.gz -C /usr/src/
[root@localhost media]# tar zxf apr-util-1.5.4.tar.gz -C /usr/src/
[root@localhost media]tar zxf zlib-1.2.8.tar.gz -C /usr/src/
[root@localhost media]# tar zxf pcre-8.39.tar.gz -C /usr/src/
[root@localhost media]# tar zxf httpd-2.4.23.tar.gz -C /usr/src/
[root@localhost media]# tar zxf openssl-1.0.1u.tar.gz -C /usr/src/
安裝
[root@localhost src]# cd /usr/src/
[root@localhost src]# ls
apr-1.5.2 apr-util-1.5.4 debug httpd-2.4.23 kernels openssl-1.0.1u pcre-8.39
[root@localhost src]# cd apr-1.5.2/
[root@www apr-1.5.2]# ./configure --prefix=/usr/local/apr
[root@www apr-1.5.2]# make && make install
[root@www ~]# cd apr-util-1.5.4/
[root@www apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@www apr-util-1.5.4]# make && make install
安裝zlib
[root@www ~]# cd zlib-1.2.8/
[root@www zlib-1.2.8]# ./configure --prefix=/usr/local/zlib
[root@www zlib-1.2.8]# make && make install
安裝pcre
[root@www ~]# cd pcre-8.39/
[root@www pcre-8.39]# ./configure --prefix=/usr/local/pcre
[root@www pcre-8.39]# make && make install
安裝openssl
安裝 apache2.4.23 時(shí)提示 openssl 版本過(guò)低,centos7 自帶版本 openssl-1.0.1e
[root@www ~]# cd openssl-1.0.1u/
[root@www openssl-1.0.1u]# ./config -fPIC --prefix=/usr/local/openssl enable-shared
[root@www openssl-1.0.1u]# make && make install
[root@www ~]# mv /usr/bin/openssl /usr/bin/openssl.1.0.1e
[root@www ~]# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
[root@www ~]# cd httpd-2.4.23/
[root@www httpd-2.4.23]# ./configure --prefix=/usr/local/http-2.4.23 --enable-so --enable-cgi --enable-cgid --enable-ssl --with-ssl=/usr/local/openssl --enable-rewrite --with-pcre=/usr/local/pcre --with-z=/usr/local/zlib --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-mpm=event--enable-proxy --enable-proxy-fcgi --enable-expires --enable-deflate
[root@www httpd-2.4.23]# make && make install
[root@www httpd-2.4.23]# ln -s /usr/local/http-2.4.23/bin/* /usr/local/bin/
\\\\優(yōu)化 http 程序執(zhí)行路徑
[root@www httpd-2.4.23]# ln -s /usr/local/http-2.4.23/bin/* /usr/local/bin
\\\\修改配置文件 httpd.conf,設(shè)置其中的 ServerName 值
[root@www /]# /usr/local/http-2.4.23/apachectl start
[root@www httpd-2.4.23]# cp /usr/local/http-2.4.23/bin/apachectl /etc/init.d/httpd
\\\\開(kāi)機(jī)后自動(dòng)啟動(dòng)
[root@www httpd-2.4.23]# vi /etc/init.d/httpd \\\\添加下面?zhèn)z行帶#
# chkconfig: 35 85 15 (在 3 和 5 啟動(dòng)模式下的--啟動(dòng)優(yōu)先級(jí))
# description: apache 2.4.23
[root@www httpd-2.4.23]# chkconfig --add httpd
[root@www httpd-2.4.23]# chkconfig httpd on
\\\\將 Apache 加入開(kāi)機(jī)自動(dòng)啟動(dòng)
[root@www httpd-2.4.23]# service httpd start
[root@www httpd-2.4.23]# netstat -anplt | grep 80 tcp6
0 0 :::80 :::* LISTEN 4807/httpd
參數(shù)解釋?zhuān)?/p>
--enable-so:支持動(dòng)態(tài)共享模塊(即打開(kāi) DSO 支持)
--enable-rewrite:支持 url 重寫(xiě)
--enable-ssl:支持 ssl --with-ssl=/usr/local/openssl:指定 ssl 安裝位置
--enable-cgi:?jiǎn)⒂?cgi --enable-cgid:MPM 使用的是 event 或 worker 要啟用 cgid -
-enable-modules=most:明確指明要靜態(tài)編譯到 httpd 二進(jìn)制文件的模塊,<MODULE-LIST>為 空格分隔的模塊名列表、all 或者 most,all 表示包含所有模塊,most 表示包含大部分常用模 塊
--enable-mods-shared=most:明確指明要以 DSO 方式編譯的模塊,<MODULE-LIST>為空格分隔 的模塊名列表、all 或者 most,all 表示包含所有模 塊,most 表示包含大部分模塊
--enable-mpms-shared=all:啟用 MPM 所有支持的模式,這樣 event、worker、prefork 就會(huì)以 模塊化的方式安裝,要用哪個(gè)就在 httpd.conf 里配置就好了。
--with-mpm=event:指定啟用的 mpm 模式,默認(rèn)使用 enevt 模式,在 apache 的早期版本 2.0 默認(rèn) prefork,2.2 版本是 worker,2.4 版本是 event.
--with-pcre=/usr/local/pcre:支持 pcre
--with-z=/usr/local/zlib:使用 zlib 壓縮庫(kù)
--with-apr=/usr/local/apr:指定 apr 的安裝路徑
--with-apr-util=/usr/local/apr-util:指定 apr-util 的安裝路徑
二.apache的優(yōu)化及模塊解釋
apache 所運(yùn)行的硬件環(huán)境都是對(duì)性能影響的因素,即使不能對(duì)硬件進(jìn)行升級(jí),也最好 給 apache 一個(gè)單獨(dú)的主機(jī)以免受到其他應(yīng)用的干擾。各個(gè)硬件指標(biāo)中,對(duì)性能影響的 是內(nèi)存,對(duì)于靜態(tài)內(nèi)容(圖片、javascript 文件、css 文件等),它決定了 apache 可以緩存多 少內(nèi)容,它緩存的內(nèi)容越多,在硬盤(pán)上讀取內(nèi)容的機(jī)會(huì)就越少,大內(nèi)存可以極大提高靜態(tài)站 點(diǎn)的速度;對(duì)動(dòng)態(tài)高負(fù)載站點(diǎn)來(lái)說(shuō),每個(gè)請(qǐng)求保存的時(shí)間更多一些,apache 的 mpm 模塊會(huì) 為每個(gè)請(qǐng)求派生出相應(yīng)的進(jìn)程或線程分別處理,而進(jìn)程或線程的數(shù)量與內(nèi)存的消耗近似成正 比,因此增大內(nèi)存對(duì)提高動(dòng)態(tài)站點(diǎn)的負(fù)載和運(yùn)行速度也極為有利 其次是硬盤(pán)的速度,靜態(tài)站點(diǎn)尤為突出,apache 不斷的在讀取文件并發(fā)送給相應(yīng)的請(qǐng)求, 硬盤(pán)的讀寫(xiě)是極其頻繁的;動(dòng)態(tài)站點(diǎn)也要不斷的加載 web 程序(php 等),一個(gè)請(qǐng)求甚至要讀 取十幾個(gè)文件才能處理完成,因此盡可能的提高硬盤(pán)速度和質(zhì)量對(duì)提高 apache 的性能是有 積極意義的。 最后是 cpu 和網(wǎng)絡(luò),cpu 影響的是 web 程序執(zhí)行速度,網(wǎng)絡(luò)影響流量大小。
工作模式
Apache HTTP 服務(wù)器被設(shè)計(jì)為一個(gè)強(qiáng)大的、靈活的能夠在多種平臺(tái)以及不同環(huán)境下工作的服 務(wù)器。這種模塊化的設(shè)計(jì)就叫做“多進(jìn)程處理模塊”(Multi-Processing Module,MPM),也叫 做工作模式
注:如果要更改工作模式里面的進(jìn)程需要到主配置文件里面把
[root@www ~]# vi /usr/local/http-2.4.23/conf/httpd.conf
Include conf/extra/httpd-mpm.conf \\這條前面#去掉就可以更改進(jìn)程了(大約在456頁(yè)搜索mpm)
[root@www /]# ps -ef | grep httpd \\看進(jìn)程
[root@www /]# apachectl -t \\jian檢查語(yǔ)法
其工作方式:當(dāng)Apache服務(wù)啟動(dòng)后,mpm_prefork模塊會(huì)預(yù)先創(chuàng)建多個(gè)子進(jìn)程(默認(rèn)為5個(gè)),每個(gè)子進(jìn)程只有一個(gè)線程,當(dāng)接收到客戶端請(qǐng)求后,mpm_prefork模塊再將請(qǐng)求轉(zhuǎn)交給子進(jìn)程進(jìn)行處理,并且每個(gè)子進(jìn)程同時(shí)只能用于單個(gè)請(qǐng)求。如果當(dāng)前的請(qǐng)求數(shù)將超過(guò)預(yù)先創(chuàng)建的子進(jìn)程數(shù)時(shí),mpm_prefork模塊就會(huì)創(chuàng)建新的子進(jìn)程來(lái)處理額外的請(qǐng)求。
開(kāi)啟prefork模式的方法:[root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf
//編寫(xiě)httpd的主配置文件,修改一下內(nèi)容
Include conf/extra/httpd-mpm.conf //默認(rèn)存在刪除“#”號(hào)即可
#LoadModule mpm_event_module modules/mod_mpm_event.so
//添加#號(hào)
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
//默認(rèn)存在,刪除#號(hào)即可!
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
//這三行便是apache的三種工作模式,可根據(jù)實(shí)際情況進(jìn)行切換
[root@localhost ~]# systemctl restart httpd //重新啟動(dòng)httpd服務(wù)
[root@localhost ~]# systemctl start httpd //手動(dòng)再啟動(dòng)一下
[root@localhost ~]# httpd -V //查看httpd的工作模式
//找到這一行即可
Server MPM: prefork //可以看到現(xiàn)在Apache工作在prefork模式
[root@www ~]# apachectl –l //小寫(xiě) L,只顯示靜態(tài)模塊)
修改 prefork 參數(shù)
[root@www ~]# vi /usr/local/http-2.4.23/conf/extra/httpd-mpm.conf
//設(shè)置prefork模式也就只有這幾個(gè)參數(shù),具體含義:
<IfModule mpm_prefork_module> //這就是prefork工作模式的參數(shù)-
StartServers 5 //apache啟動(dòng)時(shí)默認(rèn)開(kāi)啟的子進(jìn)程數(shù)
MinSpareServers 5 //最小的閑置子進(jìn)程數(shù)
MaxSpareServers 10 //的閑置子進(jìn)程數(shù)
MaxRequestWorkers 250 // 設(shè)置了允許同時(shí)的接入請(qǐng)求數(shù)量
MaxConnectionsPerChild 0 //0表示每個(gè)子進(jìn)程處理完數(shù)據(jù)后進(jìn)程永不銷(xiāo)毀,設(shè)置成非0時(shí),可防止內(nèi)存泄漏,服務(wù)器在負(fù)載小時(shí)自動(dòng)減少自己進(jìn)程數(shù)
</IfModule>
注 1:MaxRequestWorkers 是這些指令中最為重要的一個(gè),設(shè)定的是 Apache 可以同時(shí)處理 的請(qǐng)求,是對(duì) Apache 性能影響的參數(shù)。如果請(qǐng)求總數(shù)已達(dá)到這個(gè)值(可通過(guò) ps -ef|grep http|wc -l 來(lái)確認(rèn)),那么后面的請(qǐng)求就要排隊(duì),直到某個(gè)已處理請(qǐng)求完畢。這就是系統(tǒng)資源 還剩下很多而 HTTP 訪問(wèn)卻很慢的主要原因。雖然理論上這個(gè)值越大,可以處理的請(qǐng)求就越 多,建議將初始值設(shè)為(以 Mb 為單位的物理內(nèi)存/2),然后根據(jù)負(fù)載情況進(jìn)行動(dòng)態(tài)調(diào)整。 比如一臺(tái) 4G 內(nèi)存的機(jī)器,那么初始值就是 4000/2=2000
注 2:prefork 控制進(jìn)程在最初建立“StartServers”個(gè)子進(jìn)程后,為了滿足 MinSpareServers 設(shè)置的需要?jiǎng)?chuàng)建一個(gè)進(jìn)程,等待一秒鐘,繼續(xù)創(chuàng)建兩個(gè),再等待一秒鐘,繼續(xù)創(chuàng)建四個(gè)……如 此按指數(shù)級(jí)增加創(chuàng)建的進(jìn)程數(shù),最多達(dá)到每秒 32 個(gè),直到滿足 MinSpareServers 設(shè)置的值為止。這種模式 可以不必在請(qǐng)求到來(lái)時(shí)再產(chǎn)生新的進(jìn)程,從而減小了系統(tǒng)開(kāi)銷(xiāo)以增加性能。 MaxSpareServers 設(shè)置了的空閑進(jìn)程數(shù),如果空閑進(jìn)程數(shù)大于這個(gè) 值,Apache 會(huì)自動(dòng) kill 掉一些多余進(jìn)程。這個(gè)值不要設(shè)得過(guò)大,但如果設(shè)的值比 MinSpareServers 小,Apache 會(huì)自 動(dòng)把其調(diào)整為 MinSpareServers+1。如果站點(diǎn)負(fù)載較大,可考慮同時(shí)加大 MinSpareServers 和 MaxSpareServers。
注 3:ServerLimit 和 MaxClients(MaxRequestWorkers)有什么區(qū)別呢? 是因?yàn)樵?apache1 時(shí)代,控制進(jìn)程數(shù)只有 MaxClients 這個(gè)參數(shù),并且這個(gè)參數(shù)值為 256,并且是寫(xiě)死了的,試圖設(shè)置為超過(guò) 256 是無(wú)效的,這是由于 apache1 時(shí)代的服務(wù)器硬 件限制的。但是 apache2 時(shí)代由于服務(wù)器硬件的升級(jí),硬件已經(jīng)不再是限制,所以使用 ServerLimit 這個(gè)參數(shù)來(lái)控制進(jìn)程數(shù),ServerLimit 值>=MaxClient 值才有效。ServerLimit 要放在 MaxClients 之前,值要不小于 MaxClients
優(yōu)點(diǎn):成熟,兼容所有新老模塊。進(jìn)程之間完全獨(dú)立,使得它非常穩(wěn)定。同時(shí),不需要擔(dān)心線程安全的問(wèn)題。(我們常用的mod_php,PHP的拓展不需要支持線程安全)
缺點(diǎn):一個(gè)進(jìn)程相對(duì)占用更多的系統(tǒng)資源,消耗更多的內(nèi)存。而且,它并不擅長(zhǎng)處理高并發(fā)請(qǐng)求,在這種場(chǎng)景下,它會(huì)將請(qǐng)求放進(jìn)隊(duì)列中,一直等到有可用進(jìn)程,請(qǐng)求才會(huì)被處理。
Worker 模式(多線程多進(jìn)程)和 prefork 模式相比,worker 使用了多進(jìn)程和多線程的混合模式,worker 模式也同樣會(huì)先預(yù)派生一些子進(jìn)程,然后每個(gè)子進(jìn)程創(chuàng)建一些線程,同時(shí)包括一個(gè)監(jiān)聽(tīng)線程,每個(gè)請(qǐng)求過(guò)來(lái)會(huì) 被分配到一個(gè)線程來(lái)服務(wù)。線程比起進(jìn)程會(huì)更輕量,因?yàn)榫€程是通過(guò)共享父進(jìn)程的內(nèi)存空間, 因此,內(nèi)存的占用會(huì)減少一些,在高并發(fā)的場(chǎng)景下會(huì)比 prefork 有更多可用的線程,表現(xiàn)會(huì) 更優(yōu)秀一些;另外,如果一個(gè)線程出現(xiàn)了問(wèn)題也會(huì)導(dǎo)致同一進(jìn)程下的線程出現(xiàn)問(wèn)題,如果是 多個(gè)線程出現(xiàn)問(wèn)題,也只是影響 Apache 的一部分,而不是全部。由于用到多進(jìn)程多線程, 需要考慮到線程的安全了,在使用 keep-alive 長(zhǎng)連接的時(shí)候,某個(gè)線程會(huì)一直被占用,即使 中間沒(méi)有請(qǐng)求,需要等待到超時(shí)才會(huì)被釋放(該問(wèn)題在 prefork 模式下也存在) 總的來(lái)說(shuō),prefork 方式速度要稍高于 worker,然而它需要的 cpu 和 memory 資源也稍多于 woker。
work模式的配置/自行修改httpd主配置文件,切換模式并重啟服務(wù),接下來(lái)
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/extra/httpd-mpm.conf
<IfModule mpm_worker_module> //這是worker工作模式的參數(shù)
StartServers 3 //apache啟動(dòng)時(shí)默認(rèn)開(kāi)始的子進(jìn)程數(shù)
MinSpareThreads 75 //最小空閑數(shù)量的工作線程-
MaxSpareThreads 250 //空閑數(shù)量的工作線程-
ThreadsPerChild 25 //每個(gè)子進(jìn)程產(chǎn)生的線程數(shù)量
MaxRequestWorkers 400 //每個(gè)進(jìn)程接受的請(qǐng)求數(shù)量
MaxConnectionsPerChild 0 //表示永不銷(xiāo)毀
</IfModule>
Worker模式下所能同時(shí)處理的請(qǐng)求總數(shù)是由子進(jìn)程總數(shù)乘以ThreadsPerChild 值決定的,應(yīng)該大于等于MaxRequestWorkers。如果負(fù)載很大,現(xiàn)有的子進(jìn)程數(shù)不能滿足時(shí),控制進(jìn)程會(huì)派生新的子進(jìn)程。默認(rèn)的子進(jìn)程總數(shù)是16,加大時(shí) 也需要顯式聲明ServerLimit(值是20000)。需要注意的是,如果顯式聲明了ServerLimit,那么它乘以 ThreadsPerChild的值必須大于等于MaxRequestWorkers,而且MaxRequestWorkers必須是ThreadsPerChild的整數(shù)倍,否則 Apache將會(huì)自動(dòng)調(diào)節(jié)到一個(gè)相應(yīng)值。
優(yōu)點(diǎn):占據(jù)更少的內(nèi)存,高并發(fā)下表現(xiàn)更優(yōu)秀。
缺點(diǎn):必須考慮線程安全的問(wèn)題,因?yàn)槎鄠€(gè)子線程是共享父進(jìn)程的內(nèi)存地址的。如果使用keep-alive的長(zhǎng)連接方式,也許中間幾乎沒(méi)有請(qǐng)求,這時(shí)就會(huì)發(fā)生阻塞,線程被掛起,需要一直等待到超時(shí)才會(huì)被釋放。如果過(guò)多的線程,被這樣占據(jù),也會(huì)導(dǎo)致在高并發(fā)場(chǎng)景下的無(wú)服務(wù)線程可用。(該問(wèn)題在prefork模式下,同樣會(huì)發(fā)生)。
Event 模式 多進(jìn)程+多線程+epoll這是 Apache 最新的工作模式,是 worker 模式的變種,它把服務(wù)進(jìn)程從連接中分離出來(lái),一 worker 模式不同的是在于它解決了 keep-alive 長(zhǎng)連接的時(shí)候占用線程資源被浪費(fèi)的問(wèn)題,在 event 工作模式中,會(huì)有一些專(zhuān)門(mén)的線程用來(lái)管理這些 keep-alive 類(lèi)型的線程,當(dāng)有真實(shí)請(qǐng)
求過(guò)來(lái)的時(shí)候,將請(qǐng)求傳遞給服務(wù)器的線程,執(zhí)行完畢后,又允許它釋放。這增強(qiáng)了在高并 發(fā)場(chǎng)景下的請(qǐng)求處理。event 模式不能很好的支持 https 的訪問(wèn)(HTTP 認(rèn)證相關(guān)的問(wèn)題)。
地址空間:進(jìn)程內(nèi)的一個(gè)執(zhí)行單元;進(jìn)程至少有一個(gè)線程;它們共享進(jìn)程的地址空間;而進(jìn)程有自己獨(dú)立的地址空間;
資源擁有:進(jìn)程是資源分配和擁有的單位,同一個(gè)進(jìn)程內(nèi)的線程共享進(jìn)程的資源;
線程是處理器調(diào)度的基本單位,但進(jìn)程不是;
二者均可并發(fā)執(zhí)行;
網(wǎng)頁(yè)題目:apache安裝及工作模式
文章網(wǎng)址:http://jinyejixie.com/article22/cjdejc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、微信公眾號(hào)、網(wǎng)站改版、網(wǎng)站收錄、標(biāo)簽優(yōu)化、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)