亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Apache安裝部署及工作模式詳解

發布時間:2020-07-10 23:02:04 來源:網絡 閱讀:195 作者:mb5c7bb57d7f7e8 欄目:系統運維

博文大綱:

  • 一、安裝Apache2.4版本;
  • 二、Apache服務的三種工作模式詳解;
  • 三、修改apache的工作模式;
  • 四、apache工作模式的優化與修改;
  • 五、進程與線程的區別。

apache是一個模塊化設計的服務,所謂的模塊化就是將各個功能,特性都獨立的分開,這樣設計的好處是可擴展性強,各個功能之間的依賴性相對較弱,在后期修改,升級,添加新功能是非常方便。不同的模塊可以靜態的編譯進程序,也可以被動態加載。動態加載是apache的特性(DSO,dynamic shared object),所謂的動態加載就需要新的功能的時候,只需將功能模塊編譯出來,通過配置文件加載到apache服務中,而不需要重新編譯apache.

apache的版本有2.0、2.2、2.4三個版本使用較多,每個版本使用安裝都有少許差異,我今天介紹的是2.4的版本,兄弟們使用的話要看仔細了,

Apache服務新版本2.4新增特性介紹:

新增模塊

  • mod_proxy_fcgi(可提供 fcgi 代理)
  • mod_ratelimit(限制用戶帶寬)
  • mod_request(請求模塊,對請求做過濾)
  • mod_remoteip(匹配客戶端的 IP 地址)

對于基于 IP 的訪問控制做了修改,不再支持 allow,deny,order 機制,而是統一使用 require進行。

還新增以下幾條新的特性:

  • MPM 支持在運行時裝載且支持 event
  • 支持異步讀寫
  • 在每個模塊及每個目錄上指定日志級別
  • 增強版的表達式分析器
  • 每請求配置: <If>, <Elseif>
  • 毫秒級別的 keepalive timeout
  • 基于 FQDN 的虛擬主機不再需要 NameVirtualHost 指令
  • 支持使用自定義變量

一、安裝Apache2.4

安裝環境:操作系統: Centos7.2,關閉 selinux
檢查 httpd 包是否安裝,如安裝則卸載。
下載源碼包:
httpd-2.4.23.tar.gz
apr-1.5.2.tar.gz
apr-util-1.5.4.tar.gz
zlib-1.2.8.tar.gz
pcre-8.39.tar.gz
注: apr(Apache Portable Runtime)Apache 可移植運行庫, 它是一個對操作系統調用的抽
象庫,用來實現 Apache 內部組件對操作系統的使用,提高系統的可移植性

鏈接: https://pan.baidu.com/s/1km0qEYh656OtEygqc7I1GQ

1.開始安裝

[root@apache ~]# rz           #xshell中,使用rz命令將下載的tar包上傳至web服務器
#以下是將所有源碼包解壓縮
[root@apache ~]# tar zxf openssl-1.0.1u.tar.gz -C /usr/src
[root@apache ~]# tar zxf pcre-8.39.tar.gz -C /usr/src
[root@apache ~]# tar zxf zlib-1.2.8.tar.gz -C /usr/src
[root@apache ~]# tar zxf httpd-2.4.23.tar.gz -C /usr/src
[root@apache ~]# tar zxf apr-1.5.2.tar.gz -C /usr/src
[root@apache ~]# tar zxf apr-util-1.5.4.tar.gz -C /usr/src
#以下開始安裝apache所需依賴包
[root@apache ~]# cd /usr/src/apr-1.5.2/
[root@apache apr-1.5.2]# ./configure --prefix=/usr/local/apr && make && make install
[root@apache apr-1.5.2]# cd ../apr-util-1.5.4/
[root@apache apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install
[root@apache zlib-1.2.8]# cd ../zlib-1.2.8/
[root@apache zlib-1.2.8]# ./configure --prefix=/usr/local/zlib && make && make install
[root@apache pcre-8.39]# cd ../pcre-8.39/
[root@apache pcre-8.39]# ./configure --prefix=/usr/local/pcre && make && make install
[root@apache pcre-8.39]# cd ../openssl-1.0.1u/
[root@apache openssl-1.0.1u]# ./config -fPIC --prefix=/usr/local/openssl enable-shared && make && make install
#依賴安裝完成后,開始安裝http服務
[root@apache openssl-1.0.1u]# cd ../httpd-2.4.23/
[root@apache 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 && make && make install
[root@apache httpd-2.4.23]# cd /usr/local/http-2.4.23/bin/
[root@apache bin]# ln -sf /usr/local/http-2.4.23/bin/* /usr/local/bin/    #將apache的命令做軟鏈接
[root@apache bin]# apachectl start            #啟動apache服務,會提示以下信息,無所謂的。
#若想解決,只需在apache的主配置文件中添加域名即可
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::c94:cd92:5c18:a1. Set the 'ServerName' directive globally to suppress this message

關于安裝apache服務時的配置項,相關解釋如下:

--enable-so:打開dos支持,可以在編譯完成后添加額外功能
--enable-cgi:開啟cgi通用網管接口
--enable-cgid:開啟cig通用網管接口管理程序
--enable-ssl:http加密傳輸協議,支持https協議。
--enable-rewrite:開啟地址重寫功能,用來實現防盜鏈
--with-服務名稱=/PATH路徑:指定安裝時依賴服務的路徑
--enable-mods-shared=most:在安裝的過程中安裝常用模塊
--enable-mpms-shared=all:安裝apache的所有工作模式
--enable-proxy:開啟http代理功能
--enable-proxy-fcgi:支持fastcgi快速通用網關接口的fcgi協議
--enable-expires:支持緩存功能
--enable-deflate:支持壓縮功能

Apache安裝完畢!

二、Apache的工作模式

Apache HTTP 服務器被設計為一個強大的、靈活的能夠在多種平臺以及不同環境下工作的服
務器。這種模塊化的設計就叫做“多進程處理模塊”(MultiProcessing Module, MPM),也叫做工作模式。

apache服務的三種工作模式為:

  • prefork:預派生子進程;
  • worker:多進程+多線程;
  • event:多進程+多線程+epoll處理模型;

1.prefork工作模式

  • prefork是一個非線程型的、預派生的MPM,使用多個進程,每個進程在某個確定的時間只單獨處理一個連接,效率高,但內存使用比較大。

  • 優點:適合于沒有線程安全庫,需要避免線程兼容性問題的系統。它是要求將每個請求相互獨立的情況下最好的MPM,這樣若一個請求出現問題就不會影響到其他請求。

  • 缺點:一個進程相對占用更多的系統資源,消耗更多的內存。而且,它并不擅長處理高并發請求,在這種場景下,它會將請求放進隊列中,一直等到有可用進程,請求才會被處理。

2.Worker工作模式

  • worker使用了多進程和多線程的混合模式,worker模式也同樣會先預派生一些子進程,然后每個子進程創建一些線程,同時包括一個監聽線程,每個請求過來會被分配到一個線程來服務。

  • 優點:線程比起進程會更輕量,因為線程是通過共享父進程的內存空間,因此,內存的占用會減少一些,在高并發,高流量的場景下會比prefork有更多可用的線程,表現會更優秀一些;

  • 缺點:如果一個線程出現了問題也會導致同一進程下的線程出現問題,如果是多個線程出現問題,也只是影響Apache的一部分,而不是全部。由于用到多進程多線程,需要考慮到線程的安全了,在使用keep-alive長連接的時候,某個線程會一直被占用,即使中間沒有請求,需要等待到超時才會被釋放(該問題在prefork模式下也存在)。

3.Event工作模式

  • Apache最新的工作模式,它和worker模式很像

  • 優點:不同的是在于它解決了keep-alive長連接的時候占用線程資源被浪費的問題(HTTP的Keepalive方式能減少TCP連接數量和網絡負載),在event工作模式中,會有一些專門的線程用來管理這些keep-alive類型的線程,當有真實請求過來的時候,將請求傳遞給服務器的線程,執行完畢后,又允許它釋放。這增強了在高并發場景下的請求處理。

三、修改Apache工作模式

[root@apache bin]# /etc/init.d/httpd -M      #查看apache加載的模塊
[root@apache bin]# /etc/init.d/httpd -V         #查看apache的工作模式
            ..............#省略部分內容
Server's Module Magic Number: 20120211:61
Server loaded:  APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
Architecture:   64-bit
Server MPM:     event             #這行便是它的工作模式
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
            ..............#省略部分內容
[root@apache bin]# cd /usr/local/http-2.4.23/conf/     #切換至指定目錄
[root@apache conf]# vim httpd.conf
            ..............#省略部分內容
Include conf/extra/httpd-mpm.conf     #定位httpd-mpm到此,去除開頭的注釋符號
            ..............#省略部分內容
LoadModule mpm_event_module modules/mod_mpm_event.so
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so    #定位worker至此行
#上面三行就是就是apache服務的三種工作模式,需要那種工作模式,只需要將原來的工作模式注釋掉
#然后將所需要的工作模式那行去掉注釋符號,然后再啟動服務即可(注意是啟動,不是重啟)

            ..............#省略部分內容
#如,我現在將其改為worker工作模式,那么,配置如下:
Include conf/extra/httpd-mpm.conf     #定位httpd-mpm到此,去除開頭的注釋符號
            ..............#省略部分內容
#LoadModule mpm_event_module modules/mod_mpm_event.so
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
LoadModule mpm_worker_module modules/mod_mpm_worker.so
[root@apache conf]# /etc/init.d/httpd restart     #重啟時,可能會提示以下信息,是因為域名的原因,不礙事
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::c94:cd92:5c18:a1. Set the 'ServerName' directive globally to suppress this message
#若想要解決那些提示信息,可以打開apache的主配置文件進行更改:
[root@apache conf]# pwd        #確定當前路徑
/usr/local/http-2.4.23/conf
[root@apache conf]# vim httpd.conf      #打開文件,更改下面的那行,其為本機IP,若有域名,可以直接寫域名
ServerName 192.168.20.4        #去掉開頭的注釋符號
[root@apache conf]# /etc/init.d/httpd -V            #再次查看apache的工作模式
Server version: Apache/2.4.23 (Unix)
Server built:   Oct 10 2019 20:52:01
Server's Module Magic Number: 20120211:61
Server loaded:  APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
Architecture:   64-bit
Server MPM:     worker           #可以發現更改生效了
            ..............#省略部分內容

四、apache工作模式的優化與修改

在上面改工作模式,其實是調用了別的地方的配置文件,其調用的配置文件就是conf/extra/httpd-mpm.conf,這也就是為什么在上面更改工作模式時,需要先去掉Include conf/extra/httpd-mpm.conf 這行的注釋了,就是為了調用這個配置文件。

[root@apache conf]# cat extra/httpd-mpm.conf | egrep -v '^#|^$'   #查看其文件內容,并且過濾掉注釋及空行
<IfModule !mpm_netware_module>
    PidFile "logs/httpd.pid"
</IfModule>                 
<IfModule mpm_prefork_module>       <!--這就是prefork工作模式的參數-->
    StartServers             5        <!--apache啟動時默認開啟的子進程數-->
    MinSpareServers          5    <!--最小的閑置子進程數-->
    MaxSpareServers         10  <!--最大的閑置子進程數-->
    MaxRequestWorkers      250
         <!-- 
         MaxRequestWorkers最為重要,它設置了允許同時的最大接入請求數量。任何超過
         MaxRequestWorkers限制的請求將進入等候隊列,在apache2.3.1版本
         MaxRequestWorkers被稱為MaxClients,現在仍支持此名字
         -->
    MaxConnectionsPerChild   0
     <!--
     MaxConnectionsPerChild設置的是每個子進程可處理的請求數,每個子進程在處理了
     “MaxConnectionsPerChild”個請求后將自動銷毀。0表示無限制,即子進程永不銷毀。
     雖然缺省設為 0 可以使每個子進程處理更多的請求,但如果設成非零值也有兩點重要的好處:
     1、可防止意外的內存泄漏。
     2、在服務器負載下降的時侯會自動減少子進程數。因此,可根據服務器的負載來調整這個值。
     在 Apache2.3.9 之前稱之為 MaxRequestsPerChild。
     -->
     <!--prefork控制進程在最初建立“StartServers”個子進程后,為了滿足“MinSpareServers”
     設置的需要創建一個進程,等待一秒鐘,繼續創建兩個,再等待一秒鐘,繼續創建四個....
     如此按照此等級增加創建的進程數,最多達每秒鐘32個,直到滿足MinSpareServers設置
     的值為止。這種模式 可以不必在請求到來時再產生新的進程,從而減小了系統開銷以增加性能。
MaxSpareServers 設置了最大的空閑進程數,如果空閑進程數大于這個 值,Apache 會自動 
kill掉一些多余進程。這個值不要設得過大,但如果設的值比 MinSpareServers 小,Apache 
會自動把其調整為 MinSpareServers+1。如果站點負載較大,
可考慮同時加大MinSpareServers 和MaxSpareServers。-->
</IfModule>
<IfModule mpm_worker_module>    <!--這是worker工作模式的參數-->
    StartServers             3   <!--apache啟動時默認開始的子進程數-->
    MinSpareThreads         75   <!--最小空閑數量的工作線程-->
    MaxSpareThreads        250    <!--最大空閑數量的工作線程-->
    ThreadsPerChild         25  <!--每個子進程產生的線程數量-->
    MaxRequestWorkers      400   <!--與prefork模式相同-->
    MaxConnectionsPerChild   0   <!--與prefork模式相同-->
</IfModule>
<IfModule mpm_event_module>    
<!--這是event工作模式的參數,每個配置項的含義與worker基本相似-->
    StartServers             3
    MinSpareThreads         75
    MaxSpareThreads        250
    ThreadsPerChild         25
    MaxRequestWorkers      400
    MaxConnectionsPerChild   0
</IfModule>
<!--以下內容暫時不用看-->
<IfModule mpm_netware_module>
    ThreadStackSize      65536
    StartThreads           250
    MinSpareThreads         25
    MaxSpareThreads        250
    MaxThreads            1000
    MaxConnectionsPerChild   0
</IfModule>
<IfModule mpm_mpmt_os2_module>
    StartServers             2
    MinSpareThreads          5
    MaxSpareThreads         10
    MaxConnectionsPerChild   0
</IfModule>
<IfModule mpm_winnt_module>
    ThreadsPerChild        150
    MaxConnectionsPerChild   0
</IfModule>
<IfModule !mpm_netware_module>
    MaxMemFree            2048
</IfModule>
<IfModule mpm_netware_module>
    MaxMemFree             100
</IfModule>

由于上述配置文件解釋起來過于繁瑣,這里附加一張圖,可以參考此圖來更改上述配置:

Apache安裝部署及工作模式詳解

注:各個配置項的值都是有默認的限制的,若想改變其限制,則需要在配置項的上一行增加ServerLimit配置項,而且ServerLimit配置項也是有最大限制的,若要修改各種值,建議仔細閱讀下面的內容,再進行更改。

  • worker 由主控制進程生成“StartServers”個子進程,每個子進程中包含固定的ThreadsPerChild 線程數,各個線程獨立地處理請求。同樣, 為了不在請求到來時再生成線程,MinSpareThreads 和 MaxSpareThreads 設置了最少和最多的空閑線程數。而 MaxRequestWorkers 設置了同時連入的 clients 最大總數。如果現有子進程中的線程總數不能滿足負載,控制進程將派生新的子進程MinSpareThreads 和 MaxSpareThreads 的最大缺省值分別是 75 和 250。這兩個參數對 Apache的性能影響并不大,可以按照實際情況相應調節 。
  • ThreadsPerChild 是 worker MPM 中與性能相關最密切的指令。ThreadsPerChild 的最大缺省值是 64,如果負載較大,64 也是不夠的。這時要顯式使用 ThreadLimit 指令,它的最大缺省值是 20000。
  • Worker 模式下所能同時處理的請求總數是由子進程總數乘以 ThreadsPerChild 值決定的,應該大于等MaxRequestWorkers。如果負載很大,現有的子進程數不能滿足時,控制進程會派生新的子進程。默認最大的子進程總數是 16,加大時 也需要顯式聲明 ServerLimit(系統配置的最大進程數量,最大值是20000)。需要注意的是,如果顯式聲明了 ServerLimit,那么它乘以 ThreadsPerChild的值必須大于等于MaxRequestWorkers,而且MaxRequestWorkers必須是 ThreadsPerChild 的整數倍,否則 Apache 將會自動調節到一個相應值。

五、進程與線程的區別

線程是指進程內的一個執行單元,也是進程內的可調度實體.

與進程的區別:

(1)地址空間:進程內的一個執行單元;進程至少有一個線程;它們共享進程的地址空間;而進程有自己獨立的地址空間;
(2)資源擁有:進程是資源分配和擁有的單位,同一個進程內的線程共享進程的資源
(3)線程是處理器調度的基本單位,但進程不是.
(4)二者均可并發執行.
進程和線程都是由操作系統所體會的程序運行的基本單元,系統利用該基本單元實現系統對
應用的并發性。

進程和線程的區別在于:

  • 簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.
    線程的劃分尺度小于進程,使得多線程程序的并發性高。
  • 另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。

———————— 本文至此結束,感謝閱讀

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

庆云县| 吴旗县| 开封市| 乌鲁木齐县| 嘉荫县| 五家渠市| 郓城县| 鲜城| 金堂县| 诏安县| 伊宁县| 晋中市| 定陶县| 稻城县| 广西| 察哈| 新巴尔虎右旗| 清镇市| 石家庄市| 江西省| 彭泽县| 滦平县| 定兴县| 桐庐县| 建德市| 浪卡子县| 北碚区| 通许县| 五原县| 固安县| 台山市| 房产| 衡东县| 屏东县| 韶山市| 兰坪| 枞阳县| 百色市| 昂仁县| 信丰县| 谷城县|