1. 程式人生 > >lamp實驗作業詳細過程

lamp實驗作業詳細過程

lamp實驗作業詳細過程

1、請描述一次完整的http請求處理過程;
由客戶端發起請求給服務端,服務端接收到請求後解析http報文內容,把處理完成後的內容反饋給客戶端,再將每次請求記錄在日誌中。
2、httpd所支持的處理模型有哪些,他們的分別使用於哪些環境。
prefork:多進程模型,一個進程響應一個請求;
worker:多進程多線程模型,一個線程響應一個請求;
event:事件驅動模型,一個進程響應n個請求;
3、源碼編譯安裝LAMP環境(基於wordpress程序),並寫出詳細的安裝、配置、測試過程。
一、編譯安裝httpd2.4
(1)編譯安裝apr-1.5.0,httpd服務依賴於apr跨平臺運行環境
[root@httpd apr-1.5.0]# ./configure --prefix=/usr/local/apr
[root@httpd apr-1.5.0]# make -j 4 && make install
(2)編譯安裝apr-util-1.5.2工具包
[root@httpd apr-util-1.5.2]#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@httpd apr-util-1.5.2]# make -j 4 && make install
(3)下載安裝pcre-devel包,httpd編譯時依賴
(4)編譯安裝httpd2.4.9
./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=event
1、--prefix=/usr/local/apache (指定安裝路徑)
2、--sysconfdir=/etc/httpd24 (系統配置文件路徑)
3、--enable-ssl (啟動ssl功能)
4、--enable-cgi (啟動cgi協議)
5、--enable-rewrite (啟動url重寫)
6、--with-zlib (啟動壓縮傳輸)
7、--with-pcre (支持pcre正則表達式)
8、--with-apr=/usr/local/apr (依賴apr指定路徑)
9、-with-apr-util=/usr/local/apr-util (依賴apr-util指定路徑)
10、--enable-modules=most (啟用模塊級別,最大)
11、--enable-mpms-shared=all (啟動動態模塊裝載)
12、--with-mpm=event (mpm默認采用event模式)
編輯/etc/httpd/httpd.conf,添加如下行即可:
PidFile "/var/run/httpd.pid"
提供SysV服務腳本/etc/rc.d/init.d/httpd,內容如下:
#!/bin/bash
#

httpd Startup script for the Apache HTTP Server

#

chkconfig: - 85 15

description: Apache is a World Wide Web server. It is used to serve \

HTML files and CGI.

processname: httpd

config: /etc/httpd/conf/httpd.conf

config: /etc/sysconfig/httpd

pidfile: /var/run/httpd.pid

Source function library.

. /etc/rc.d/init.d/functions
if [ -f /etc/sysconfig/httpd ]; then
. /etc/sysconfig/httpd
fi

Start httpd in the C locale by default.

HTTPD_LANG=${HTTPD_LANG-"C"}

This will prevent initlog from swallowing up a pass-phrase prompt if

mod_ssl needs a pass-phrase from the user.

INITLOG_ARGS=""

Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server

with the thread-based "worker" MPM; BE WARNED that some modules may not

work correctly with a thread-based MPM; notably PHP will refuse to start.

Path to the apachectl script, server binary, and short-form for messages.

apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0
start() {
echo -n $"Starting $prog: "
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
killproc -p ${pidfile} -d 10 $httpd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
echo -n $"Reloading $prog: "
if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
RETVAL=$?
echo $"not reloading due to configuration syntax error"
failure $"not reloading $httpd due to configuration syntax error"
else
killproc -p ${pidfile} $httpd -HUP
RETVAL=$?
fi
echo
}

See how we were called.

case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p ${pidfile} $httpd
RETVAL=$?
;;
restart)
stop
start
;;
condrestart)
if [ -f ${pidfile} ] ; then
stop
start
fi
;;
reload)
reload
;;
graceful|help|configtest|fullstatus)
$apachectl $@
RETVAL=$?
;;
)
echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
exit 1
esac
exit $RETVAL
添加執行權限
chmod +x /etc/rc.d/init.d/httpd
加入服務列表
chkconfig --add httpd
添加環境變量httpd.sh
Vim /etc/profile.d/httpd.sh
export PATH=/usr/local/apache/bin:$PATH
二、mariadb二進制格通用包安裝
(1)準備數據目錄:
以/mydata/data目錄為例;
(2)安裝配置mariadb
#useradd -r mysql (添加系統用戶mysql,這樣被不明用戶劫持也不會得到超管權限對系統做出更大的威脅)
#tar xf mariadb-VERSION.tar.gz -C /usr/local
#cd /usr/local
#ln -sv mariadb-VERSION mysql
#cd /usr/local/mysql
#chown -R root:mysql ./

#scripts/mysql_install_db --user=mysql --datadir=/mydata/data (執行數據庫安裝腳本,指定用戶和數據庫文件存放物理路徑)
#cp support-files/mysql.server /etc/init.d/mysqld (復制服務腳本到system的環境中)
(3) #cp support-files/my-large.cnf /etc/my.cnf
添加三個選項:
datadir = /mydata/data
innodb_file_per_table = ON
skip_name_resolve = ON
(4)啟動服務,添加環境變量,/etc/init.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
執行mysql_secure_installation配置root用戶和密碼
三、編譯安裝php-5.4.26
(1) ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/usr/local/apache/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts
1、--prefix=/usr/local/php (指定安裝路徑)
2、--with-mysql=/usr/local/mysql (指定依賴的數據庫指定路徑)
3、--with-openssl (啟動OpenSSL功能)
4、--with-mysqli=/usr/local/mysql/bin/mysql_config (指定mysqli路徑)
5、--enable-mbstring (支持多位元組字串)
6、--with-freetype-dir (支持多類字體)
7、--with-jpeg-dir (支持jpeg格式)
8、--with-png-dir (支持png格式)
9、-with-zlib (支持壓縮傳輸)
10、--with-libxml-dir=/usr (支持處理xml)
11、--enable-xml (支持xml功能)
12、--enable-sockets (使php支持sockets方式內部交互)
13、--with-apxs2=/usr/local/apache/bin/apxs (把php編譯成httpd的模塊)
14、--with-mcrypt (支持加密解密庫)
15、--with-config-file-path=/etc (指定php配置文件存放路徑)
16、--with-config-file-scan-dir=/etc/php.d (配置文件查詢路徑)
17、--with-bz2 (支持bz2)
18、--enable-maintainer-zts (為了支持apache的worker或event這兩個MPM,編譯時使用了--enable-maintainer-zts選項)
Make –j 4 && make install
(2) 為php提供配置文件

cp php.ini-production /etc/php.ini

四、httpd支援php配置

vim /etc/httpd/httpd.conf

1、添加如下二行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
2、定位至DirectoryIndex index.html
修改為:
DirectoryIndex index.php index.html
而後重新啟動httpd,或讓其重新載入配置文件即可測試php是否已經可以正常使用。
測試index.php與本地mysql的通訊鏈接
<?php
$conn=mysql_connect(‘127.0.0.1‘,‘root‘,‘root001‘);
if ($conn)
echo "Connect OK!";
else
echo "Failure.";
mysql_close();
?>
五、截圖驗證
apachectl -t -D DUMP_MODULES
技術分享圖片
數據庫鏈接成功
技術分享圖片
PHP測試頁面
技術分享圖片
六、安裝wordpress
技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片
Ab壓力測試,lamp同時部署在一臺虛擬機上,並且使用php模塊集成httpd的部署。-n 代表同時請求的資源數,-c 代表並發連接數。
技術分享圖片
4、建立httpd服務器(基於編譯的方式進行),要求:
提供兩個基於名稱的虛擬主機:
(a)www1.stuX.com,頁面文件目錄為/web/vhosts/www1;錯誤日誌為/var/log/httpd/www1.err,訪問日誌為/var/log/httpd/www1.access;
(b)www2.stuX.com,頁面文件目錄為/web/vhosts/www2;錯誤日誌為/var/log/httpd/www2.err,訪問日誌為/var/log/httpd/www2.access;

(c)為兩個虛擬主機建立各自的主頁文件index.html,內容分別為其對應的主機名;
(d)通過www1.stuX.com/server-status輸出httpd工作狀態相關信息,且只允許提供帳號密碼才能訪問(status:status);

建立步驟:
1、編譯安裝httpd服務器
開發環境包組:Development Tools,Server Platform Development
開發程序包:pcre-devel
(1)apr-1.4+
#./configure --prefix=/usr/local/apr
#make && make install
註意:ARP類似於java虛擬機可以讓httpd服務跨平臺運行

(2)apr-util-1.4+
#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
#make && make install
註意:apr-util依賴於apr-1.4

(3)http-2.4
#./configure --prefix=/usr/local/apache24 --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
#make && make install
註意:編譯的配置內容,按順序解釋
1.定義安裝目錄2.定義系統目錄3.開啟ssl功能模塊4.開啟CGI模塊,能夠吧動態內容通過CGI協議給後臺應用服務處理4.開啟rewrite功能5.依賴zlib 6.依賴pcre 7.依賴apr的安裝路徑8.依賴apr-util的安裝路徑9.開啟httpd多數模塊功能10.開啟mpms共享模塊11.默認以prefork多進程模式運行
把apache的二進制文件導出到系統環境變量,如截圖
技術分享圖片
導出apache的頭文件到系統目錄下,如截圖
技術分享圖片
定義httpd服務啟動配置文件,如截圖
技術分享圖片
添加到服務啟動列表中chkconfig –add httpd,chkconfig –level 345 httpd on,這樣就可以用service啟動httpd服務了,httpd編譯安裝完成。如截圖
技術分享圖片
技術分享圖片
配置vhosts
(a)(c)(d)
1.在httpd下/etc/httpd24/extra/vhosts.conf寫入虛擬主機的配置
<VirtualHost 192.168.1.109:80> (定義虛擬主機的host地址和監聽端口)
ServerName www1.stuX.com (定義域名地址)
DocumentRoot "/web/vhosts/www1" (指定文件URL根文件路徑)
<Directory "/web/vhosts/www1"> (定義文件訪問屬性)
Options None (默認選項為空)
AllowOverride None (允許基於IP訪問)
AuthType Basic (基於basic認證模式訪問)
AuthName "String" (認證名稱類型為字符串)
AuthUserFile "/user/user1" (指定認證文件)
Require user status (允許用戶名為status)
</Directory>
ErrorLog "/var/log/httpd/www1.err" (指定錯誤日誌保存的物理路徑)
CustomLog "/var/log/httpd/www1.access" common (指定訪問日誌保存的物理路徑)
<Location /server-status> (定義主機的status查看頁面)
SetHandler server-status (設定標頭)
Order allow,deny (訪問白名單)
Allow from 192.168 (可以訪問頁面的主機所在網段)
</Location>
2.配置httpd.conf
#DocumentRoot "/usr/local/apache24/htdocs" 註釋默認的文件根目錄路徑
Include /etc/httpd24/extra/vhosts.conf 填入默認加載虛擬主機配置的文件,這樣httpd就會加載vhosts.conf的配置來啟動對應的虛擬主機。
3.新建basic認證指定文件
技術分享圖片
(b)(c)
定義虛擬主機2的配置
<VirtualHost 192.168.1.109:80>
ServerName www2.stuX.com
DocumentRoot "/web/vhosts/www2"
<Directory "/web/vhosts/www2">
Options None
AllowOverride None
Require all granted
</Directory>
ErrorLog "/var/log/httpd/www2.err"
CustomLog "/var/log/httpd/www2.access" common測試驗證截圖
日誌文件
![](http://i2.51cto.com/images/blog/201803/08/f1ee64e1120bc5131746b6479f2c29c9.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
主機1頁面訪問
![](http://i2.51cto.com/images/blog/201803/08/024cb33f2aff9695ee51cb39d82615b1.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![](http://i2.51cto.com/images/blog/201803/08/25c2a9e15cc0c898d86ec26b1eb81c37.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![](http://i2.51cto.com/images/blog/201803/08/c4b2737f4f088ed89355173f7d08f418.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
主機2頁面訪問
![](http://i2.51cto.com/images/blog/201803/08/d43d7b0c27388589889c33cb65826563.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
5、為第4題中的第2個虛擬主機提供https服務,使得用戶可以通過https安全的訪問此web站點;
(1)要求使用證書認證,證書中要求使用的國家(CN)、州(HA)、城市(ZZ)和組織(MageEdu);
(2)設置部門為Ops,主機名為www2.stuX.com,郵件為[email protected]
br/>測試驗證截圖
日誌文件
![](http://i2.51cto.com/images/blog/201803/08/f1ee64e1120bc5131746b6479f2c29c9.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
主機1頁面訪問
![](http://i2.51cto.com/images/blog/201803/08/024cb33f2aff9695ee51cb39d82615b1.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![](http://i2.51cto.com/images/blog/201803/08/25c2a9e15cc0c898d86ec26b1eb81c37.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![](http://i2.51cto.com/images/blog/201803/08/c4b2737f4f088ed89355173f7d08f418.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
主機2頁面訪問
![](http://i2.51cto.com/images/blog/201803/08/d43d7b0c27388589889c33cb65826563.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
5、為第4題中的第2個虛擬主機提供https服務,使得用戶可以通過https安全的訪問此web站點;
(1)要求使用證書認證,證書中要求使用的國家(CN)、州(HA)、城市(ZZ)和組織(MageEdu);
(2)設置部門為Ops,主機名為www2.stuX.com,郵件為[email protected]
1.在系統CA目錄下創建私鑰
技術分享圖片
2.創建私鑰密碼長度為2048,導出到/etc/pki/CA/private/cakey.pem
技術分享圖片
3.自簽證書
openssl req -new -x509 -key private/cakey.pem -out cacert.pem 自簽證書以x509方式加密,導出為cacert.pem
認證信息
技術分享圖片
在指定路徑下創建serial index.txt
技術分享圖片
在httpd服務器下創建ssl目錄創建簽證文件和認證請求
新增httpd.key私鑰文件
技術分享圖片
新增認證請求文件
技術分享圖片
對httpd的認證請求做簽署,httpd.crt簽證成功後放回httpd下的ssl目錄
技術分享圖片
#yum -y install mod_ssl 安裝ssl模塊
配置httpd關於ssl的文件
技術分享圖片
指定httpd的ca簽署文件,和自身的私鑰文件
技術分享圖片
在httpd.conf下開啟ssl模塊,指定ssl所在的配置文件
技術分享圖片
技術分享圖片
啟動ssl服務
技術分享圖片
測試openssl效果
openssl s_client -connect www2.stuX.com:443 -CAfile /etc/pki/CA/cacert.pem
技術分享圖片
6、在LAMP架構中,請分別以php編譯成httpd模塊形式和php以fpm工作為獨立守護進程的方式來支持httpd,列出詳細的過程。
註意:php編譯成httpd模塊形式請參考第三題
PHP-FPM工作模式部署
1、 編譯安裝PHP-FPM
(1)./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --w
ith-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm --with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2
註意:本次編譯和之前的php編譯安裝的內容有重復,重復的內容我就不再描述,只描述新增的內容。
--enable-fpm (啟動php-fpm,fastcgi傳輸協議)
make -j 4 && make install
(2) 為php提供配置文件:

cp php.ini-production /etc/php.ini

(3) 配置php-fpm
為php-fpm提供SysV init腳本,並將其添加至服務列表:

cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm

chmod +x /etc/rc.d/init.d/php-fpm

chkconfig --add php-fpm

chkconfig php-fpm on

為php-fpm提供配置文件:

cp /usr/local/php5/etc/php-fpm.conf.default /usr/local/php5/etc/php-fpm.conf

編輯php-fpm的配置文件:

vim /usr/local/php5/etc/php-fpm.conf

配置fpm的相關選項為你所需要的值,並啟用pid文件(如下最後一行):
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
pid = /usr/local/php5/var/run/php-fpm.pid
接下來就可以啟動php-fpm了:

service php-fpm start

二、配置httpd
1、啟用httpd的相關模塊
在Apache httpd 2.4以後已經專門有一個模塊針對FastCGI的實現,此模塊為mod_proxy_fcgi.so,它其實是作為mod_proxy.so模塊的擴充,因此,這兩個模塊都要加載
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
2、 配置主機支持fcgi
ProxyRequests Off
ProxyPassMatch ^/(.*.php)$ fcgi://192.168.1.216:9000/www/magedu.com/$1
ProxyRequests Off:關閉正向代理
ProxyPassMatch:把以.php結尾的文件請求發送到php-fpm進程,php-fpm至少需要知道運行的目錄和URI,所以這裏直接在fcgi://192.168.1.216:9000後指明了這兩個參數,其它的參數的傳遞已經被mod_proxy_fcgi.so進行了封裝,不需要手動指定。
3、編輯apache配置文件httpd.conf,讓apache能識別php格式的頁面,並支持php格式的主頁

vim /etc/httpd/httpd.conf

1、添加如下二行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
2、定位至DirectoryIndex index.html
修改為:
DirectoryIndex index.php index.html
三、截圖驗證
技術分享圖片
技術分享圖片

lamp實驗作業詳細過程