標籤:lamp apche
背景介紹
LAMP是LNMP結構提出之前風靡了很久的結構,本系列就從無到有一點點介紹LAMP的編譯安裝。首先,介紹下本系列的拓撲結構圖650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/89/67/wKioL1gSH_fySE_sAACI6-JB-zA681.png" title="1.png" style="float:none;" alt="wKioL1gSH_fySE_sAACI6-JB-zA681.png" />
此時伺服器響應用戶端訪問可以分為幾種應答方式:650) this.width=650;" src="http://s2.51cto.com/wyfs02/M01/89/6A/wKiom1gSH_eRRW6TAABHdDFe5IE860.png" title="2.png" style="float:none;" alt="wKiom1gSH_eRRW6TAABHdDFe5IE860.png" />
1.用戶端向伺服器端發起請求
2.伺服器端查看請求類型,當為靜態頁面請求,直接返回結果
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M02/89/67/wKioL1gSH_fQQeQJAABXhObw7NQ052.png" title="3.png" style="float:none;" alt="wKioL1gSH_fQQeQJAABXhObw7NQ052.png" />
1.用戶端向伺服器端發起請求
2.伺服器端查看請求類型,當為動態網頁面請求,通過設定檔中設定的反向 Proxy,通過fcgi協議交給後端PHP伺服器
3.PHP伺服器上啟用php-fpm服務,監聽在一個通訊端上想用請求,並將結果反饋給httpd伺服器
4.httpd伺服器在通過其rewirte技術,將結果以偽靜態頁面的形式反饋給用戶端
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M01/89/67/wKioL1gSH_fhHZICAABmLh6Sk3A391.png" title="4.png" style="float:none;" alt="wKioL1gSH_fhHZICAABmLh6Sk3A391.png" />
1.用戶端向伺服器端發起請求
2.伺服器端查看請求類型,當為動態網頁面請求,交給後端PHP伺服器
3.如果客戶的請求中需要訪問資料庫,PHP伺服器會將請求轉交給Mysql伺服器,這裡需要注意的是:PHP伺服器本身不會請求Mysql,只是替使用者轉交請求,所以PHP在編譯安裝時需要啟用 --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd
--with-mysqli=mysqlnd這3個選項,此時的mysqlnd類似於一個驅動,可以使PHP串連到Mysaql伺服器,如果PHP與Mysql伺服器為同一台主機,以--with-mysql選項為例,此時需要指明Mysql的安裝路徑 --with-mysql=/path/to/mysql
4.Mysql伺服器將資料處理結果反饋給PHP伺服器
5.PHP伺服器在將結果反饋給httpd伺服器
6.httpd伺服器在通過其rewirte技術,將結果以偽靜態頁面的形式反饋給用戶端
Apche2.4介紹
CentOS6系列預設使用的Apache2.2版本,之後發布的Apache2.4版本在功能上比之前有了進一步的增強,主要表現為:
1.MPM支援在運行時裝載
2.支援event
3.非同步讀寫
4.在每模組及每目錄上指定記錄層級
5.每請求配置:<If> <Elseif>
6.增強版的運算式分析器
7.毫秒級的keepalive timeout
8.支援主機名稱的虛擬機器主機不在需要NameVirtualHost指令
9.支援使用自訂變數
10.新增一些模組:mod_proxy_fcgi,mod_ratelimit,mod_request,mod_remoteip
11.對於基於IP的訪問做了修改,不在使用order,allow,deny這些機制;而是統一使用require進行,如require granted和require denied
實驗說明
作業系統:CentOS6.8
源碼包:httpd-2.4.23.tar.bz2,apr-1.5.2.tar.bz2,apr-util-1.5.4.tar.bz2
準備工作:安裝pcre-devel包,Apache2.4編譯時間需要用到
實驗目的
1.編譯安裝Apache2.4
2.測試MPM模組動態切換
3.測試虛擬機器主機實現
4.將編譯後的服務加入Service控制
實驗步驟
一、編譯安裝
1.安裝先決條件並解壓源碼包
yum -y install pcre-devel#安裝pcre-devel包
for i in apr-1.5.2.tar.bz2 apr-util-1.5.4.tar.bz2 httpd-2.4.23.tar.bz2;do tar -xf $i -C /usr/local/src/;done
#將apr-1.5.2.tar.bz2 apr-util-1.5.4.tar.bz2 httpd-2.4.23.tar.bz2壓縮包解壓到/usr/local/src目錄下
2.安裝apr-1.5.2
cd /usr/local/src/apr-1.5.2#進入apr-1.5.2目錄
./configure --prefix=/usr/local/apr-1.5.2#檢查編譯環境
make && make install#編譯安裝
3.安裝apr-util-1.5.4
cd /usr/local/src/apr-util-1.5.4#進入apr-1.5.2目錄
./configure --prefix=/usr/local/apr-util-1.5.4 --with-apr=/usr/local/apr-1.5.2#檢查編譯環境
make && make install#編譯安裝
4.安裝Apache2.4
cd /usr/local/src/httpd-2.4.23#進入httpd-2.4.23目錄
./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable--ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr-1.5.2 --with-apr-util=/usr/local/apr-util-1.5.4 --enable-modeles=most --enable-mpms-shared=all --with-mpm=event#檢查編譯環境
make && make install#編譯安裝
5.路徑輸出
echo "export PATH=/usr/local/apache/bin:$PATH" > /etc/profile.d/apache.sh
source /etc/profile.d/apache.sh
6.標頭檔輸出
ln -sv /usr/local/apache/include/ /usr/include/apache
7.庫檔案輸出
apche2.4編譯安裝後在/usr/local/apache/目錄下沒有lib目錄,此步驟跳過,有則使用echo "/usr/local/apache/lib > /etc/ld.so.conf.d/apche.conf"進行庫檔案輸出,再使用ldconfig -v查看
8.MAN文檔輸出
vim /etc/man.config
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M02/89/6A/wKiom1gSH_jzOPlRAAAm5KIWDWo933.png" title="5.png" style="float:none;" alt="wKiom1gSH_jzOPlRAAAm5KIWDWo933.png" />
9.啟動並檢查Apche
/usr/local/apache/bin/apachectl start#啟動服務
netstat -ntl#查看80連接埠是否正常偵聽
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/89/6A/wKiom1gSH_jBp4bkAAAOtZ98M58714.png" title="6.png" style="float:none;" alt="wKiom1gSH_jBp4bkAAAOtZ98M58714.png" />
二、動態切換MPM模組
Apache2.4的mpm採用模組方式實現,支援DSO動態裝卸載,編譯時間設定的是event模型,從主設定檔/etc/httpd/httpd.conf中可以看到當前啟用的mpm模組,切換mpm模型就是啟用相應模型的模組,更改前間隙先停止服務650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/89/67/wKioL1gSH_ixzctbAAAc2ZARIlg324.png" title="7.png" style="float:none;" alt="wKioL1gSH_ixzctbAAAc2ZARIlg324.png" />
注意:/etc/httpd/extra/httpd-mpm.conf設定檔是修改mpm模型參數的,如果只修改這個檔案會發現不會生效,原因就是在主設定檔下該設定檔預設是登出掉的,啟用後才會生效
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M01/89/6A/wKiom1gSH_igjWnkAAARNAN699I320.png" title="8.png" style="float:none;" alt="wKiom1gSH_igjWnkAAARNAN699I320.png" />
三、測試虛擬機器主機
1.Apche2.4不再有虛擬機器主機開關選項,主設定檔中登出中心主機650) this.width=650;" src="http://s2.51cto.com/wyfs02/M02/89/67/wKioL1gSH_ihq42sAAA7YvSHnp0906.png" title="9.png" style="float:none;" alt="wKioL1gSH_ihq42sAAA7YvSHnp0906.png" />
2.類似mpm模組一樣,需要在主設定檔中啟用虛擬機器主機設定檔。如果虛擬機器主機設定檔存放在httpd.conf的主設定檔中,則不需要啟用虛擬機器主機設定檔。建議將虛擬機器主機的設定檔和主設定檔分開。經測試,如果中心主機與虛擬機器主機都存放於httpd.conf主設定檔中並同時啟用,虛擬機器主機生效。650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/89/6A/wKiom1gSH_nypzmOAAAMzi0AMfU142.png" title="10.png" style="float:none;" alt="wKiom1gSH_nypzmOAAAMzi0AMfU142.png" />
3.vim /etc/httpd/extra/httpd-vhosts.conf 編輯虛擬機器主機設定檔650) this.width=650;" src="http://s2.51cto.com/wyfs02/M01/89/67/wKioL1gSH_nz1JD_AAAzIz1rIlo091.png" title="11.png" style="float:none;" alt="wKioL1gSH_nz1JD_AAAzIz1rIlo091.png" />
4.為www.vhost.com建立首頁面
mkdir -p /var/www/vhost
echo "www.vhost.com" > /var/www/vhost/index.html650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/89/6A/wKiom1gSH_mS8rNyAAAdbHwX31w686.png" title="12.png" style="float:none;" alt="wKiom1gSH_mS8rNyAAAdbHwX31w686.png" />
此時會發現訪問被拒絕,原因是Apche2.4開始每個網站都需要配置目錄許可權,添加後就可以正常訪問了650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/89/67/wKioL1gSH_nSLr86AABNAhoa_WE114.png" title="13.png" style="float:none;" alt="wKioL1gSH_nSLr86AABNAhoa_WE114.png" />
Apche2.4不再使用以前的Oeder Allow Deny機制,訪基於IP存取控制由Require來進行:
允許所有主機訪問:Require all granted
拒絕所有主機訪問:Require all denied
控制某主機的訪問,可以是單個IP地址,也可以是網段:
Require ip IPADDR
Require not ip IPADDR
使用主機名稱控制,可以是FQDN,也可以是整個域:
Require host $HOSTNAME
Require not host $HOSTNAME
四、添加啟動指令碼
服務指令碼可以參考CentOS6.8內建的httpd2.2的指令碼,將其複製到/etc/rc.d/init.d目錄下,保證有執行許可權,並做如下修改,主要是路徑修改650) this.width=650;" src="http://s1.51cto.com/wyfs02/M00/89/67/wKioL1gSH_mhUUwhAABFhYKKYCM115.png" title="14.png" style="float:none;" alt="wKioL1gSH_mhUUwhAABFhYKKYCM115.png" />
650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />之後再到主設定檔中增加一行pidfile的位置指向650) this.width=650;" src="http://s1.51cto.com/wyfs02/M00/89/6A/wKiom1gSH_ng8QAoAABFTHq_AHE735.png" title="15.png" style="float:none;" alt="wKiom1gSH_ng8QAoAABFTHq_AHE735.png" />
650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />然後使用chkconfig --add httpd,chkconfig httpd on後,就可以使用service控制了,至此操作完成
實驗中發現一個不理解的現象:按照理解,httpd服務運行時應該先讀主設定檔httpd,然後再讀指令檔,但主設定檔中指定LockFile檔案位置後,通過httpd -t檢查文法會報錯,不添加啟動後會遵循指令碼中的設定使用/var/lock/subsys/httpd;如果主設定檔中不添加PidFile檔案,使用Service可以正常啟動httpd服務,但是不會讀取指令檔,即不會產生/var/run/httpd.pid檔案,啟動後無法使用service httpd stop關閉,提示沒有pid檔案
本文出自 “兔樣兔森破” 部落格,請務必保留此出處http://arkling.blog.51cto.com/2844506/1866548
LAMP編譯安裝(一)——安裝Apache2.4