首先要了解Apache採用的MPM(Multi -Processing Modules,多道處理模塊),MPM是Apache的核心,它的做用是管理網絡鏈接、調度請求。Apache中MPM分爲3種(perfork、worker、event)。php
Apache2.4版本 新特性: 一、MPM 支持在運行時裝載;不過要開啓這種特性,在編譯安裝要啓用這三種功能; --enable-mpms-shared=all --with-mpm=event 二、支持 event 三、支持異步讀寫 四、在每一個模塊及每一個目錄上指定日誌級別 五、加強版的表達式分析器 六、每請求配置:<If>, <Elseif> 七、毫秒級別的 keepalive timeout 八、基於 FQDN 的虛擬主機再也不須要 NameVirtualHost 指令 九、支持使用自定義變量
主流網站服務器軟件:html
* Apache:時間較早,模塊化設計,幾乎能夠運行在全部操做系統上,性能穩定;配置相對複雜,自身沒法解析動態網頁。 * nginx:高性能、高併發的網站和反向代理服務器,也可作郵件代理,阿里再開發tengine應用於天貓和淘寶。 * tomcat:java應用服務器,也是servlet容器,能夠認爲是Apache的擴展,能夠獨立運行,也能夠和Apache合做。
Apache與nginx的區別:java
* nginx:配置簡潔、反向代理、負載均衡、靜態數據處理能力是Apache3倍以上,消耗內存少。 * Apache:跨全部平臺、支持通用網關接口(cgi)、支持多種動態網站語言(php,python,perl,java),模塊組件比nginx多,運行穩定;配置複雜
所需安裝包:
連接:https://pan.baidu.com/s/10obRMPE5_2YZEUurQV36Vg
提取碼:ltou
1)編寫安裝apache腳本:python
[root@localhost ~]# vim httpd.sh #!/bin/bash cd /root tar zxf apr-1.5.2.tar.gz cd apr-1.5.2/ ./configure --prefix=/usr/local/apr make && make install cd .. tar zxf apr-util-1.5.4.tar.gz cd apr-util-1.5.4/ ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr make && make install cd .. tar zxf zlib-1.2.8.tar.gz cd zlib-1.2.8/ ./configure --prefix=/usr/local/zlib make && make install cd .. tar zxf pcre-8.39.tar.gz cd pcre-8.39/ ./configure --prefix=/usr/local/pcre make && make install cd .. tar zxf openssl-1.0.1u.tar.gz cd openssl-1.0.1u/ ./config -fPIC --prefix=/usr/local/openssl enable-shared make && make install mv /usr/bin/openssl /usr/bin/openssl.1.0.1e ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl cd .. tar zxf httpd-2.4.23.tar.gz cd 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 ln -s /usr/local/http-2.4.23/bin/* /usr/local/bin/ echo "ServerName www.example.com:80" >> /usr/local/http-2.4.23/conf/httpd.conf /usr/local/http-2.4.23/bin/apachectl start cp /usr/local/http-2.4.23/bin/apachectl /etc/init.d/httpd systemctl daemon-reload systemctl enable httpd systemctl start httpd
2)查看httpd模塊linux
* httpd -V \\查看版本和已裝模塊 * httpd -l \\只查看靜態編譯模塊 * httpd -M \\查看全部模塊
3)MPM(Multi Process Modules):多進程處理模塊
負責實現網絡監聽、請求的處理等功能,目的爲了在不一樣的平臺上實現最優化的性能和穩定性。nginx
操做系統平臺 MPM BeOS beos NetWare mpm_netware OS/2 mpm_os2 linux prefork、worker、event Windows mpm_winnt
4)apache三種工做模式apache
prefork模式: 非線程、預生成進程型MPM,一個子進程同一時間點僅能處理一個用戶請求,根據併發請求數動態調整子進程 * 優勢:穩定; * 缺點:慢,佔用資源,不適用於高併發場景
worker模式: 線程化、多進程型MPM,每一個進程可生成多個線程,每一個線程處理一個請求,缺點:長鏈接,資源容易被佔用 * 優勢:相比prefork 佔用的內存較少,能夠同時處理更多的請求; * 缺點:使用keep-alive的長鏈接方式,某個線程會一直被佔據,即便沒有傳輸數據,也須要一直等待到超時纔會被釋放。若是過多的線程,被這樣佔據,也會致使在高併發場景下的無服務線程可用。(該問題在prefork模式下,一樣會發生)。
event模式: worker的改進版,使用監控線程處理長鏈接出現的資源佔用問題 * 優勢:單線程響應多請求,佔據更少的內存,高併發下表現更優秀,會有一個專門的線程來管理keep-alive類型的線程,當有真實請求過來的時候,將請求傳遞給服務線程,執行完畢後,又容許它釋放。 * 缺點:沒有線程安全控制。
5)Apache主配置文件vim
[root@localhost conf]# vim /usr/local/http-2.4.23/conf/httpd.conf
注:若是想要使用三種模式的任意一種須要在主配置文件中去掉想用模式的註釋其他兩個需加上註釋。。。
6)修改mpm配置文件
這裏只是簡單介紹了event模式tomcat
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/extra/httpd-mpm.conf <IfModule mpm_event_module> StartServers 3 #apache 啓動時候默認開始的子進程數 MinSpareThreads 75 #最小空閒數量的工做線程 MaxSpareThreads 250 #最大空閒數量的工做線程 ThreadsPerChild 25 #每一個子進程產生的線程數量 MaxRequestWorkers 400 #容許同時的最大接入請求數量 MaxConnectionsPerChild 0 #每一個子進程可處理的請求數 </IfModule>
7)使用ab命令進行壓力測試安全
yum -y install httpd-tools ab -c 160 -n 10000 http://192.168.1.1/index.html 使用ab壓力測試命令進行160人併發訪問,發出10000個請求。
語法 ab(選項)(參數) 選項 -A:指定鏈接服務器的基本的認證憑據; -c:指定一次向服務器發出請求數; -C:添加cookie; -g:將測試結果輸出爲「gnuolot」文件; -h:顯示幫助信息; -H:爲請求追加一個額外的頭; -i:使用「head」請求方式; -k:激活HTTP中的「keepAlive」特性; -n:指定測試會話使用的請求數; -p:指定包含數據的文件; -q:不顯示進度百分比; -T:使用POST數據時,設置內容類型頭; -v:設置詳細模式等級; -w:以HTML表格方式打印結果; -x:以表格方式輸出時,設置表格的屬性; -X:使用指定的代理服務器發送請求; -y:以表格方式輸出時,設置表格屬性。 參數 主機:被測試主機。