馬哥教育網絡班21期+第12周課程練習
1、請描述一次完整的http請求處理過程;
1)建立或處理連接:客戶端發送http請求報文,服務器端接收或拒絕請求; 2)接收請求:服務器端接收來自客戶端對某些資源的請求; 3)處理請求:服務器端解析客戶端請求報文,獲取客戶端請求的資源及請求方法等信息; 4)訪問資源:服務器端獲取客戶端請求的資源; 5)構建響應報文; 6)發送響應報文; 7)日志記錄;
2、httpd所支持的處理模型有哪些,他們的分別使用于哪些環境。
1)prefork: 多進程模型,每個進程響應一個請求; 一個主進程:負責生成及回收子進程、創建套接字、接收請求、派發請求給子進程; 多個子進程:負責處理來自主進程派發的客戶端請求,每個子進程處理一個請求; 工作模式:服務器端會預先生成幾個空閑進程,用于響應客戶端請求; 可以在配置文件中設置最大及最小空閑子進程數目; 2)worker: 多進程多線程模型,每個線程響應一個請求; 一個主進程:負責生成及回收子進程、創建套接字、接收請求、派發請求給子進程; 多個子進程:每個子進程生成多個線程; n個線程:每個線程響應一個請求; 并發數量:子進程數目x每個子進程所能生成的最大線程數 3)event: 事件驅動模型,多進程模型,每個進程響應多個請求; 一個主進程:負責生成及回收子進程、創建套接字、接收請求、派發請求給子進程; 多個子進程:每個子進程基于事件驅動機制響應多個請求;
3、源碼編譯安裝LAMP環境(基于wordpress程序),并寫出詳細的安裝、配置、測試過程。
環境:linux 2.6.32-358.el6.x86_64 + httpd 2.4.9 + mysql-5.5.33 + php-5.4.26 安裝編譯環境: [root@web ~]# yum groupinstall "Desktop Platform Development" "Development tools" -y [root@web ~]# yum install mode_ssl openssl-devel pcre-devel -y 注:這個必須得安裝,編譯Apache的時候用 一、編譯安裝Apache 1.解決依賴關系 httpd-2.4.9需要較新版本的apr和apr-util,因此需要事先對其進行升級。 升級方式有兩種,一種是通過源代碼編譯安裝, 一種是直接升級rpm包。這里選擇使用編譯源代碼的方式進行。 APR(Apache portable Run-time libraries,Apache可移植運行庫) 的目的如其名稱一樣,主要為上層的應用程序提供 一個可以跨越多操作系統平臺使用的底層支持接口庫。在早期 的Apache版本中, 應用程序本身必須能夠處理各種具體操作系統平臺的細節, 并針對不同的平臺調用不同的處理函數。 (1)編譯安裝apr [root@web ~]# tar xf apr-1.5.0.tar.bz2 [root@web ~]# cd apr-1.5.0 [root@web apr-1.5.0]# ./configure --prefix=/usr/local/apr [root@web apr-1.5.0]# make && make install (2)編譯安裝apr-util [root@web ~]# tar xf apr-util-1.5.3.tar.bz2 [root@web ~]# cd apr-util-1.5.3 [root@web apr-util-1.5.3]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr [root@web apr-util-1.5.3]# make && make install 2.編譯安裝httpd [root@web ~]# tar xf httpd-2.4.9.tar.bz2 [root@web ~]# cd httpd-2.4.9 [root@web httpd-2.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 [root@web httpd-2.4.9]# make && make install 注:configure后跟的參數解釋 --prefix=/usr/local/apache設定httpd的安裝目錄 --sysconfdir=/etc/httpd24 設定httpd的配置文件目錄 --enable-so 支持共享模塊,如果沒有這個PHP模塊無法加入 --enable--ssl 支持ssl --enable-cgi 支持cgi --enable-rewrite 支持url重寫 --with-zlib 支持zlib壓縮,傳輸層的壓縮(不指定具體的路徑,默認在系統中搜索) --with-pcre 支持正則化(不指定具體的路徑,默認在系統中搜索) --with-apr=/usr/local/apr 指定apr的路徑 --with-apr-util=/usr/local/apr-util 指定apr-util的路徑 --enable-modules=most 指定要編譯的模塊(most/all) --enable-mpms-shared=all 指定要編譯mpm --with-mpm=event 指定httpd默認的MPM的工作方式 3.修改主配置文件,添加PidFile路徑 [root@web ~]# vim /etc/httpd24/httpd.conf PidFile "/var/run/httpd24.pid" 4.提供SysV服務腳本/etc/rc.d/init.d/httpd,內容如下: [root@web ~]# vim /etc/init.d/httpd24 這里是復制的/etc/init.d/httpd的腳本做了修改,具體修改內容: apachectl=/usr/local/apache/bin/apachectl httpd=${HTTPD-/usr/local/apache/bin/httpd} prog=httpd24 pidfile=${PIDFILE-/var/run/httpd24.pid} lockfile=${LOCKFILE-/var/lock/subsys/httpd24} [root@web ~]# chmod +x /etc/init.d/httpd24 5.將httpd24加入服務列表并啟動httpd24服務 [root@web ~]# chkconfig --add httpd24 [root@ftp ~]# service httpd24 start 出現了報錯: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message 解決方法: [root@web ~]# vim /etc/httpd24/httpd.conf ServerName localhost:80 6.可以將新編譯的httpd24加入環境變量 [root@web ~]# vim /etc/profile.d/httpd24.sh export PATH=/usr/local/apache/bin:$PATH [root@web ~]# source /etc/profile.d/httpd24.sh 二、編譯安裝mysql-5.5.33 1.安裝編譯環境和需要的包 [root@web ~]# yum install ncurses-devel.x86_64 cmake.x86_64 -y 2.創建mysql用戶和對應的mysql數據目錄 [root@web ~]# groupadd -r mysql [root@web ~]# useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql [root@web ~]# chown -R mysql:mysql /mydata/data 3.編譯安裝mysql-5.5.33 [root@web ~]# tar xf /mysql-5.5.33.tar.gz -C /usr/local/ [root@web ~]# ln -sv /usr/local/mysql-5.5.33/ /usr/local/mysql [root@web ~]# cd /usr/local/mysql [root@web mysql]# cmake . [root@web mysql]# make install [root@web mysql]# chmod +x scripts/mysql_install_db [root@web mysql]# scripts/mysql_install_db --basedir=/usr/local/mysql --user=mysql --datadir=/mydata/data 4.為mysql提供配置文件 [root@web mysql]# mv /etc/my.cnf{,.bak} [root@web mysql]# cp support-files/my-large.cnf /etc/my.cnf [root@web mysql]# vim /etc/my.cnf thread_concurrency = 2 //這里為cpu個數乘以2 datadir = /mydata/data //這行自己添加,為數據文件目錄 5.為mysql提供SysV服務腳本 [root@web mysql]# cp support-files/mysql.server /etc/init.d/mysqld [root@web mysql]# chmod +x /etc/init.d/mysqld [root@web mysql]# chkconfig --add mysqld [root@web mysql]# chkconfig mysqld on [root@web mysql]# service mysqld start 6.配置環境變量,使mysql的命令可以直接使用 [root@web mysql]# vim /etc/profile.d/mysql.sh export PATH=/usr/local/mysql/bin:$PATH [root@web mysql]# chmod +x /etc/profile.d/mysql.sh [root@web mysql]# source /etc/profile.d/mysql.sh 7.配置mysql的man手冊 [root@web mysql]# vim /etc/man.config MANPATH /usr/local/mysql/man 8.配置mysql的頭文件到系統頭文件 [root@web mysql]# ln -sv /usr/local/mysql/include /usr/include/mysql 9.配置mysql的庫文件到系統庫查找路徑 [root@web mysql]# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf [root@web mysql]# ldconfig //重新載入系統庫 三、編譯安裝php-5.4.26 1.安裝編譯php時需要的包 [root@web ~]# yum install bzip2-devel libmcrypt-devel libxml2-devel -y 2.編譯安裝php [root@web ~]# tar xf php-5.4.26.tar.bz2 [root@web ~]# cd php-5.4.26/ [root@web php-5.4.26]# ./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)這里為了支持apache的worker或event這兩個MPM,編譯時使用了--enable-maintainer-zts選項。 (2)如果使用PHP5.3以上版本,為了鏈接MySQL數據庫,可以指定mysqlnd,這樣在本機就不需要先安裝MySQL 或MySQL開發包了。mysqlnd從php 5.3開始可用,可以編譯時綁定到它(而不用和具體的MySQL客戶端庫 綁定形成依賴),但從PHP 5.4開始它就是默認設置了。 [root@web php-5.4.26]# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd [root@web php-5.4.26]# make [root@web php-5.4.26]# make test [root@web php-5.4.26]# make intall 3.為php提供配置文件: [root@web php-5.4.26]# cp php.ini-production /etc/php.ini 4.編輯apache配置文件httpd.conf,以apache支持php [root@web php-5.4.26]# vim /etc/httpd/httpd.conf 添加如下二行 AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps 定位至DirectoryIndex index.html 修改為: DirectoryIndex index.php index.html 5.重啟httpd24服務 [root@web php-5.4.26]# service httpd24 restart 四、編譯安裝wordpress 1.解壓wordpress包到/usr/local/appache/htdocs [root@web ~]# tar -xf wordpress-4.7-zh_CN.tar.gz -C /usr/local/apache/htdocs 2.創建數據庫并授權登錄用戶 [root@web ~]# mysql mysql> create database wordpress; mysql> grant all on wordpress.* to wpuser@'192.168.%.%' identified by 'password'; 3.編輯wordpress的配置文件 [root@web ~]# cp /usr/local/apache/htdocs/wordpress/wp-config-sample.php /usr/local/apache/htdocs/wordpress/wp-config.php [root@web ~]# vim /usr/local/apache/htdocs/wordpress/wp-config.php /** WordPress數據庫的名稱 */ define('DB_NAME', 'wordpress'); /** MySQL數據庫用戶名 */ define('DB_USER', 'wpuser'); /** MySQL數據庫密碼 */ define('DB_PASSWORD', 'password'); /** MySQL主機 */ define('DB_HOST', '192.168.82.58'); 4.在瀏覽器中訪問并配置 http://192.168.82.58/wordpress/
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.conf將DocumentRoot注釋并開啟vhosts [root@web ~]# vim /etc/httpd24/httpd.conf #DocumentRoot "/usr/local/apache/htdocs" Include /etc/httpd24/extra/httpd-vhosts.conf 2.創建所需的目錄并創建index.html [root@web ~]# mkdir -p /web/vhosts/www{1,2} [root@web ~]# mkdir /var/log/httpd/ [root@web ~]# echo www1.stuX.com > /web/vhosts/www1/index.html [root@web ~]# echo www2.stuX.com > /web/vhosts/www2/index.html 3.編輯vhosts配置文件創建兩個虛擬主機并設置server-status [root@web ~]# vim /etc/httpd24/extra/httpd-vhosts.conf <VirtualHost 192.168.82.58:80> DocumentRoot "/web/vhosts/www1" ServerName www1.stuX.com ErrorLog "/var/log/httpd/www1.err" CustomLog "/var/log/httpd/www1.access" common <Directory "/web/vhosts/www1"> Options None AllowOverride None Require all granted </Directory> <Location /server-status> SetHandler server-status AuthType Basic Order deny,allow Deny from all Allow from 192.168.82 AuthName "Web Auth Server-status" AuthUserFile "/etc/httpd24/extra/.htpasswd" Require valid-user </location> </VirtualHost> <VirtualHost 192.168.82.58:80> DocumentRoot "/web/vhosts/www2" ServerName www2.stuX.com ErrorLog "/var/log/httpd/www2.err" CustomLog "/var/log/httpd/www2.access" common <Directory "/web/vhosts/www2"> Options None AllowOverride None Require all granted </Directory> </VirtualHost> 4.生成密碼文件 [root@web ~]# htpasswd -c -m /etc/httpd24/extra/.htpasswd status 5.添加hosts文件記錄 [root@web ~]# vim /etc/hosts 192.168.82.58 www1.stuX.com 192.168.82.58 www2.stuX.com 6.重啟服務并測試 [root@web ~]# service httpd24 restart [root@web ~]# curl www1.stuX.com www1.stuX.com [root@web ~]# curl www2.stuX.com www2.stuX.com
原創文章,作者:N21_孤狼,如若轉載,請注明出處:http://www.www58058.com/64299