12.http學習與應用實現

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

(0)
N27_jiangyefanN27_jiangyefan
上一篇 2017-09-20 00:12
下一篇 2017-09-20 14:38

相關推薦

  • haproxy 監控配置

    方法一:在defaults段增加如下配置: stats refresh 30s #統計頁面自動刷新時間stats uri /stats #統計頁面urlstats realm baison-test-Haproxy #統計頁面密碼框上提示文本stats auth admin:admin123 #統計頁面用戶名和密碼設置stats hide-version #…

    Linux干貨 2018-03-19
  • N28_第二周

    linux文件管理命令

    Linux干貨 2017-12-10
  • 第二周作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。  cp復制,mv移動,rm刪除     1、cp:             1,用法:      &n…

    Linux干貨 2016-07-04
  • M20 – 1- 第二周(2):課堂練習與作業

    課堂練習: 1、顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間出現至少一位數字的文件和目錄 [root@centos6 ~]# ls /var/l*[[:digit:]]*[[:lower:]] ls: cannot access /var/l*[[:digit:]]*[[:lower:…

    Linux干貨 2016-08-02
  • 對軟連接進行cp,rm

    軟連接的原理 圖1 由 1 號inode 讀取到連結檔的內容僅有檔名,根據檔名鏈接到正確的目錄去取得目標文件的inode , 最終就能夠讀取到正確的數據了。 軟連接的使用 創建軟連接,從下圖可以看出軟連接的大小是11個字節,對比/etc/passwd和passwdlns可知他們不是同一個文件。 在復制cp的時候對軟連接的處理 對指向文件的的軟連接:使用cp …

    Linux干貨 2017-02-25
  • Linux網絡配置

    Linux網絡基礎配置 將Linux主機接入到網絡,需要配置網絡相關設置。 一般包括如下內容:     主機名     IP/netmask     路由:默認網關     DNS服務器  …

    Linux干貨 2016-09-09
欧美性久久久久