Apache入門篇(一)之安裝部署apache


一、HTTPD特性

(1)高度模塊化:core(核心) + modules(模塊) = apache
(2)動態模塊加載DSO機制: Dynamic Shared Object(動態共享對象)
(3)MPM:Multipath Processing Modules(多路處理模塊)多種不同的IO處理模型

 Aapche的三種工作模型:

prefork:2.2版本默認的模型,多進程模型,每個進程響應一個請求;進程之間彼此獨立,每個子進程只有一個線程,最穩定。缺點:內存消耗較大
一個主進程:負責生成n個子進程,子進程也稱為工作進程,每個子進程處理一個用戶請求;即便沒有用戶請求,也會預先生成多個空閑進程,隨時等待請求到達;最大不會超過1024個;主進程監聽套接字,在請求到來時fork出一個子進程去處理該請求。

worker:多線程模型,每個線程響應一個請求;

一個主進程:生成多個子進程,每個子進程負責生個多個線程,每個線程響應一個請求;
m進程,n線程:m*n

優點:線程之間內存共享,系統內存利用率較高,內存消耗比prefork小的多,適用於高流量的http服務器。

缺點:一個進程崩潰整個進程,整個進程里面的線程全部一起掛掉。

event:事件驅動模型,每個線程響應n個請求;

一個主進程:生成m個子進程,每個進程直接n個請求;m*n

在非常繁忙的服務器下,以上兩種模型都不再適用,在work基礎上,event把服務進程從連接中分離出來。服務器處理速度很快,同時具有非常高的點擊率時,可用的線程數量就是關鍵的資源限制,此時Event MPM方式是最有效的

在2.2版本的httpd中,三種模式的切換需要重新編譯,2.4版本后,無需編譯,直接修改配置導入module即可。

二、Centos 7.4編譯安裝部署Apache 2.2.31 

①下載安裝包
[root@longlinux ]#  cd /usr/local/src            //切換到下載目錄
[root@longlinux src]# wget http://mirrors.cnnic.cn/apache/httpd/httpd-2.2.31.tar.gz

②解壓
[root@longlinux src]# tar -jxvf httpd-2.2.31.tar.bz2    //解壓

③配置編譯參數
[root@longlinux src]# cd httpd-2.2.31
[root@longlinux httpd-2.2.31]# ./configure \
--prefix=/usr/local/apche2 \         //指定安裝位置
--with-included-apr \                   //httpd依賴的包apr,可支持httpd跨平台運作
--enable-so \                               //表示啟用DSO
--enable-deflate=shared \           //表示動態共享的方式編譯deflate,后面參數同理
--enable-expires=shared \
--enable-rewrite=shared \
--with-pcre                                 //正則相關的庫

配置時出現了如下錯誤:error: mod_deflate has been requested but can not be built due to prerequisite failures
由於缺少了zlib-devel庫,需要安裝:
[root@longlinux httpd-2.2.31]# yum install -y zlib-devel

Tips:  DSO是Dynamic Shared Objects(動態共享目標)的縮寫,它提供了一種在運行時將特殊格式的代碼在程序運行需要時,將需要的部分從外存調入內存執行的方法。Apache 支持動態共享模塊,也支持靜態模塊,靜態的話,會把需要的目標直接編譯進apache的可執行文件中,相比較動態,雖然省去了加載共享模塊的步驟,但是也加大了二進制執行文件的空間,變得臃腫。

④編譯
為了避免編譯的時候出錯,需事先安裝好一些庫文件
[root@longlinux httpd-2.2.31]# yum install pcre pcre-devel apr apr-devel gcc gcc++
[root@longlinux httpd-2.2.31]# make

⑤安裝
[root@longlinux httpd-2.2.31]# make install

⑥啟動服務
[root@longlinux httpd-2.2.31]# /usr/local/apche2/bin/apachectl -t   //檢查語法配置文件的語法
[root@longlinux httpd-2.2.31]# /usr/local/apche2/bin/apachectl start //啟動httpd服務  

啟動的時候出現了如下錯誤,需要修改配置文件
/usr/local/apache2/conf/httpd.conf
[root@longlinux httpd
-2.2.31]# vim /usr/local/apache2/conf/httpd.conf
,搜索‘#ServerName’ ,添加ServerName localhost:80
[root@longlinux httpd-2.2.31]# /usr/local/apache2/bin/apachectl restart //再重新啟動apche即可
/usr/local/apache2/bin/apachectl -M 查看動態模塊 

/usr/local/apache2/bin/apachectl -l 查看靜態模塊

/usr/local/apache2/bin/apachectl -t 查看配置文件/usr/local/apache2/conf/httpd.conf是否存在錯誤語法

三、Centos7.4安裝部署Apache 2.4.33

(1)Yum方式安裝

[root@localhost ~]# yum install -y httpd
[root@localhost ~]# systemctl enable httpd
[root@localhost ~]# systemctl start httpd

(2)源碼方式安裝

①下載httpd-2.4.33源碼包

[root@localhost ~]# wget http://mirror.bit.edu.cn/apache/httpd/httpd-2.4.33.tar.gz
[root@localhost ~]# tar -zxvf httpd-2.4.33.tar.gz

②編譯安裝

[root@localhost httpd-2.4.33]# ./configure --prefix=/usr/local/apache-2.4.33 \   #指定安裝位置
--with-included-apr \  #httpd依賴的包apr,可支持httpd跨平台運作
--enable-so \    #啟用DSO
--enable-deflate=shared \   #動態共享的方式編譯deflate,后面的參數同理
--enable-mods-shared=most \
--enable-rewrite=shared \
--enable-mpms-shared \  #2.4版本使用動態更換mpm模式必須使用該參數
--with-pcre #正則相關的庫 [root@localhost httpd-2.4.33]# make && make install

③編譯過程報錯解決

apache 2.4版本后,需要提前安裝apr和apr-util的包以解決依賴關系,以及解決正則庫依賴,不然會有以下報錯:

錯誤1:error: mod_deflate has been requested but can not be built due to prerequisite failures

解決:yum install -y zlib-devel

錯誤2:configure: error: Bundled APR requested but not found at ./srclib/. Download and unpack the corresponding apr and

apr-util packages to ./srclib/.

解決:
[root@localhost ~]# wget http://archive.apache.org/dist/apr/apr-util-1.5.1.tar.gz
[root@localhost ~]# wget http://archive.apache.org/dist/apr/apr-1.5.1.tar.gz
[root@localhost ~]# cp -rf apr-util-1.5.1 httpd-2.4.33/srclib/apr-util
[root@localhost ~]# cp -rf apr-1.1.1 httpd-2.4.33/srclib/apr

錯誤3:/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_GetErrorCode'
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_SetEntityDeclHandler'
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_ParserCreate'
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_SetCharacterDataHandler'
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_ParserFree'
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_SetUserData'
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_StopParser'
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_Parse'
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_ErrorString'
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_SetElementHandler'
collect2: error: ld returned 1 exit status
make[2]: *** [htpasswd] Error 1
make[2]: Leaving directory `/usr/local/httpd-2.4.26/support'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/local/httpd-2.4.26/support'
make: *** [all-recursive] Error 1

解決:更換apr,apr-util的版本,前期用了1.6版本報錯,更換了1.5版本后可正常編譯

④Apache啟動

[root@localhost httpd-2.4.33]# /usr/local/apache-2.4.33/bin/apachectl -t   #apache配置文件語法檢測
Syntax OK
[root@localhost httpd
-2.4.33]# /usr/local/apache-2.4.33/bin/apachectl start #apache啟動
[root@localhost httpd
-2.4.33]# ps -ef |grep httpd #查看apache進程 root 32457 1 0 12:34 ? 00:00:00 /usr/local/apache-2.4.33/bin/httpd -k start daemon 32458 32457 0 12:34 ? 00:00:00 /usr/local/apache-2.4.33/bin/httpd -k start daemon 32459 32457 0 12:34 ? 00:00:00 /usr/local/apache-2.4.33/bin/httpd -k start daemon 32460 32457 0 12:34 ? 00:00:00 /usr/local/apache-2.4.33/bin/httpd -k start root 32567 34939 0 12:36 pts/1 00:00:00 grep --color=auto httpd root 34201 34186 0 03:35 ? 00:00:03 httpd -DFOREGROUND bin 34242 34201 0 03:35 ? 00:00:00 httpd -DFOREGROUND bin 34243 34201 0 03:35 ? 00:00:00 httpd -DFOREGROUND bin 34244 34201 0 03:35 ? 00:00:00 httpd -DFOREGROUND
[root@localhost httpd
-2.4.33]# netstat -tulnp |grep 80 #查看apache是否監聽80端口 tcp6 0 0 :::80 :::* LISTEN 32457/httpd

[root@localhost httpd-2.4.33]# curl localhost #訪問apache <html><body><h1>It works!</h1></body></html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM