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 5 跳過
6、在LAMP架構中,請分別以php編譯成httpd模塊形式和php以fpm工作為獨立守護進程的方式來支持httpd,列出詳細的過程。
php編譯成模塊形式在第三題中做過,Apache和mysql編譯安裝與第三題相同。 1.安裝所需要的環境 yum?install?bzip2-devel?libmcrypt-devel?libxml2-devel?-y 2.編譯安裝php-5.4.26 [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/php5? ????????--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?--enable-fpm?--with-mcrypt?? ????????--with-config-file-path=/etc? ????????--with-config-file-scan-dir=/etc/php.d?--with-bz2 [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.為php-fpm提供SysV腳本并添加到服務列表 [root@web?php-5.4.26]#?cp?sapi/fpm/init.d.php-fpm?? ????????????????????????/etc/rc.d/init.d/php-fpm [root@web?php-5.4.26]#?chmod?+x?/etc/rc.d/init.d/php-fpm [root@web?php-5.4.26]#?chkconfig?--add?php-fpm [root@web?php-5.4.26]#?chkconfig?php-fpm?on 5.為php-fpm提供配置文件 [root@web?php-5.4.26]#?cp?/usr/local/php5/etc/php-fpm.conf.default ?????????????????????????/usr/local/php5/etc/php-fpm.conf 6.編輯php-fpm配置文件內容 [root@web?php-5.4.26]#?vim?/usr/local/php5/etc/php-fpm.conf ????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? 7.啟動php-fpm并檢測 [root@web?php-5.4.26]#?service?php-fpm?start [root@web?php-5.4.26]#?ps?aux?|?grep?php-fpm ????root??81568??0.0??0.0?154960??3940??Ss???Aug10???0:00?php-fpm:?master? ????????????????????????????????process?(/usr/local/php5/etc/php-fpm.conf)?? ????nobody81569??0.0??0.0?154960??3496??SAug10???0:00?php-fpm:?pool?www??? ????nobody81570??0.0??0.0?154960??3496??SAug10???0:00?php-fpm:?pool?www??? ????nobody81571??0.0??0.0?154960??3496??SAug10???0:00?php-fpm:?pool?www??? ????nobody81572??0.0??0.0?154960??3496??SAug10???0:00?php-fpm:?pool?www??? ????nobody81573??0.0??0.0?154960??3496??SAug10???0:00?php-fpm:?pool?www??? ????root??81623??0.0??0.0?103244???840?pts/0S+???00:11???0:00?grep?php-fpm 此命令輸出有中幾個php-fpm進程就說明啟動成功了 [root@web?php-5.4.26]#?netstat?-tnlp?|?grep?php-fpm tcp0??0?127.0.0.1:9000??0.0.0.0:*???LISTEN??81568/php-fpm? fpm監聽在127.0.0.1的9000端口 8.編輯httpd的配置文件使支持php-fpm [root@web?php-5.4.26]#?vim?/etc/httpd24/httpd.conf?? ????LoadModule?proxy_module?modules/mod_proxy.so??//這行取消注釋 ????LoadModule?proxy_fcgi_module?modules/mod_proxy_fcgi.so?//這行取消注釋 ????Include?/etc/httpd24/extra/httpd-vhosts.conf???//這行取消注釋 #DocumentRoot?"/usr/local/apache/htdocs"??//這行注釋掉 ????AddType?application/x-httpd-php??.php?//添加這行 AddType?application/x-httpd-php-source??.phps??//添加這行 ????DirectoryIndex??index.php??index.html??//這行修改 在Apache?httpd?2.4以后已經專門有一個模塊針對FastCGI的實現, 此模塊為mod_proxy_fcgi.so,它其實是作為mod_proxy.so模塊的擴充, 因此,這兩個模塊都要加載。 9.創建虛擬主機目錄并創建所需php測試文件 [root@web?php-5.4.26]#?mkdir?-p?/web/vhosts/www1 [root@web?php-5.4.26]#?echo?'<??php??phpinfo()??>'?>?/web/vhosts/www1/index.php 10.編輯虛擬主機配置文件使支持使用fcgi [root@web?php-5.4.26]#?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 ????????????ProxyRequests?Off ????ProxyPassMatch?^/(.*\.php)$?fcgi://127.0.0.1:9000/web/vhosts/www1/$1 ????????????<Directory?"/web/vhosts/www1"> ????Options?None ????AllowOverride?None ????Require?all?granted ????</Directory> ????</VirtualHost> ????ProxyRequests?Off:關閉正向代理 ????ProxyPassMatch:把以.php結尾的文件請求發送到php-fpm進程, ????php-fpm至少需要知道運行的目錄和URI,所以這里直接在fcgi://127.0.0.1:9000后 ????指明了這兩個參數,其它的參數的傳遞已經被mod_proxy_fcgi.so進行了封裝,不需要手動指定。 11.重啟httpd24服務并測試 [root@web?php-5.4.26]#?service?httpd24?restart
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87437