第15周做業

一、講述httpd工做原理以rpm包的方式安裝LAMP,配置基於域名的虛擬機主機並部署PhpMyAdmin、WordPress(提供https)、discuzphp

http協議介紹html

http/0.91991,原型版本,功能簡陋,只有一個命令GET。GET /index.html ,服務器只能迴應HTML格式字符串,不能迴應別的格式

http/1.0: 1996年5月,支持cache, MIME, method

每一個TCP鏈接只能發送一個請求,發送數據完畢,鏈接就關閉,若是還要請求其餘資源,就必須再新建一個鏈接

引入了POST命令和HEAD命令

頭信息是 ASCII 碼,後面數據可爲任何格式。服務器迴應時會告訴客戶端,數據是什麼格式,即Content-Type字段的做用。這些數據類型總稱爲MIME 多用途互聯網郵件擴
展,每一個值包括一級類型和二級類型,預約義的類型,也可自定義類型, 常見Content-Type值:text/xml image/jpeg audio/mp3 http/1.1:1997年1月 引入了持久鏈接(persistent connection),即TCP鏈接默認不關閉,能夠被多個請求複用,不用聲明Connection: keep-alive。對於同一個域名,大多數瀏覽器容許
同時創建6個持久鏈接 引入了管道機制(pipelining),即在同一個TCP鏈接裏,客戶端能夠同時發送多個請求,進一步改進了HTTP協議的效率 新增方法:PUT、PATCH、OPTIONS、DELETE 同一個TCP鏈接裏,全部的數據通訊是按次序進行的。服務器只能順序處理迴應,前面的迴應慢,會有許多請求排隊,形成
"隊頭堵塞"(Head-of-line blocking) 爲避免上述問題,兩種方法:一是減小請求數,二是同時多開持久鏈接。網頁優化技巧,如合併腳本和樣式表、將圖片嵌入CSS代碼、域名分片(domain sharding)等 HTTP 協議不帶有狀態,每次請求都必須附上全部信息。請求的不少字段都是重複的,浪費帶寬,影響速度

 

 

 

 

 

 

 

 
1、創建鏈接:接收或拒絕鏈接請求

2、接收請求:接收客戶端請求報文中對某資源的一次請求的過程

Web訪問響應模型(Web I/O)

    單進程I/O模型:啓動一個進程處理用戶請求,並且一次只處理一個,多個請求被串行響應

    多進程I/O模型:並行啓動多個進程,每一個進程響應一個鏈接請求

    複用I/O結構:啓動一個進程,同時響應N個鏈接請求

實現方法:多線程模型和事件驅動

    多線程模型:一個進程生成N個線程,每線程響應一個鏈接請求

    事件驅動:一個進程處理N個請求

    複用的多進程I/O模型:啓動M個進程,每一個進程響應N個鏈接請求,同時接收M*N個請求

3、處理請求:服務器對請求報文進行解析,並獲取請求的資源及請求方法等相關信息,根據方法,資源,首部和可選的主體部分對請求進行處理

    元數據:請求報文首部

    <method> <URL> <VERSION>

    HEADERS 格式 name:value

    <request body>

示例:

    Host: www.magedu.com 請求的主機名稱

    Server: Apache/2.4.7

HTTP經常使用請求方式,Method:標明客戶端但願服務器對資源執行的動做
GET:從服務器獲取一個資源
HEAD:只從服務器獲取文檔的響應首部
POST:向服務器輸入數據,一般會再由網關程序繼續處理,常見爲提交表單
PUT:將請求的主體部分存儲在服務器中,如上傳文件
DELETE:請求刪除服務器上指定的文檔
TRACE:追蹤請求到達服務器中間通過的代理服務器
OPTIONS:請求服務器返回對指定資源支持使用的請求方法
status:狀態碼

    1xx:100-101 信息提示
    2xx:200-206 成功
    3xx:300-305 重定向
    4xx:400-415 錯誤類信息,客戶端錯誤
    5xx:500-505 錯誤類信息,服務器端錯誤
    200:成功,請求數據經過響應報文的entity-body部分發送;OK
    301:請求的URL執行的資源已經被刪除;但在響應報文中經過首部LOCATION指明瞭資源如今所處的新位置;Moved Permanently
    302:響應報文Location指明資源臨時新位置;Moved Temporarily
    304:客戶端發出了條件式請求,但服務器上的資源不曾發生改變,則經過響應此響應狀態碼通知客戶端;Not Modified
    401:須要輸入帳號和密碼認證方能訪問資源:Unauthorized
    403:請求被禁止;Forbidden
    404:服務器沒法找到客戶端請求的資源;Not Found
    500:服務器內部錯誤;Internal Server Error
    502:代理服務器從後端服務器收到了一條僞響應,如沒法鏈接到網關;Bad Gateway
    503:服務不可用,臨時服務器維護或過載,服務器沒法處理請求
    504:網關超時mysql

4、訪問資源:

服務器獲取請求報文中請求的資源web服務器,即存放了web資源的服務器,負責向請求者提供對方請求的靜態資源,或動態運行後生成的資源

資源放置於本地文件系統特定的路徑:DocRoot

DocRoot /var/www/html

/var/www/html/images/logo.jpg

http://www.magedu.com/images/logo.jpg

web服務器資源路徑映射方式:

    (a) docroot

    (b) alias

    (c) 虛擬主機docroot

    (d) 用戶家目錄docroot

5、構建響應報文:

一旦Web服務器識別除了資源,就執行請求方法中描述的動做,並返回響應報文。響應報文中 包含有響應狀態碼、響應首部,若是生成了響應主體的話,還包括響應主體

1)響應實體:若是事務處理產生了響應主體,就將內容放在響應報文中回送過去。響應報文中一般包括:

    描述了響應主體MIME類型的Content-Type首部

    描述了響應主體長度的Content-Length

    實際報文的主體內容

2)URL重定向:web服務構建的響應並不是客戶端請求的資源,而是資源另一個訪問路徑

    永久重定向301:http://www.360buy.com

    臨時重定向302:http://www.taobao.com

6、發送響應報文

Web服務器經過鏈接發送數據時也會面臨與接收數據同樣的問題。服務器可能有不少條到各個客戶端的鏈接,有些是空閒的,有些在向服務器發送數據,還有一些在向客戶端回送響
應數據。服務器要記錄鏈接的狀態,還要特別注意對持久鏈接的處理。對非持久鏈接而言,服務器應該在發送了整條報文以後,關閉本身這一端的鏈接。對持久鏈接來講,鏈接可能
仍保持打開狀態,在這種狀況下,服務器要正確地計算Content
-Length首部,否則客戶端就沒法知道響應何時結束了 7、記錄日誌 最後,當事務結束時,Web服務器會在日誌文件中添加一個條目,來描述已執行的事務

 

httpd mpm三種工做模型
prefork:多進程I/O模型,每一個進程響應一個請求,默認模型 一個主進程:生成和回收n個子進程,建立套接字,不響應請求 多個子進程:工做work進程,每一個子進程處理一個
請求;系統初始時,預先生成多個空閒進程,等待請求,最大不超過1024個
worker: 複用的多進程I
/O模型,多進程多線程,IIS使用此模型 一個主進程:生成m個子進程,每一個子進程負責生個n個線程,每一個線程響應一個請求,併發響應請求:m*n
event: 事件驅動模型(worker模型的變種) 一個主進程:生成m個子進程,每一個進程直接響應n個請求,併發響應請求:m*n,有專門的線程來管理這些keep-alive類型的線
程,當有真實請求時,將請求傳遞給服務線程,執
行完畢後,又容許釋放。這樣加強了高併發場景下的請求處理能力
httpd-2.2event 測試版,centos6默認

httpd-2.4event 穩定版,centos7默認

以rpm包的方式安裝LAMP,配置基於域名的虛擬機主機並部署PhpMyAdmin、WordPress(提供https)、discuzlinux

快速部署LAMP
    CentOS 7:
        Modules:httpd, php, php-mysql, mariadb-server
        FastCGI:httpd, php-fpm, php-mysql, mariadb-server
    CentOS 6:
        Modules:httpd, php, php-mysql, mysql-server
        FastCGI:默認不支持

    安裝LAMP
        CentOS 6:
            yum install httpd, php, mysql-server, php-mysql
            service httpd start
            service mysqld start
        CentOS 7:
            yum install httpd, php, php-mysql, mariadb-server
            systemctl start httpd.service
            systemctl start mariadb.service
        注意:要使用prefork模型
部署phpMyadmin
    yum -y install httpd mariadb-server php php-mysql
    systemctl start httpd
    systemctl start mariadb
    mysql_secure_installation
    下載:https://www.phpmyadmin.net/downloads/
    tar xvf phpMyAdmin-4.0.10.20-all-languages.tar.xz -C /var/www/html
mv phpMyAdmin-4.0.10.20-source pma cd pma
/ cp config.sample.inc.php config.inc.php vim config.ini.php 修改默認密碼 $cfg['blowfish_secret'] = 'a8b7c6d'; $cfg['Servers'][$i]['host'] = '192.168.242.129'; # 地址 $cfg['Servers'][$i]['connect_type'] = 'tcp'; # 類型 $cfg['Servers'][$i]['compress'] = false; # 壓縮 yum -y install php-mbstring systemctl reload httpd
建立wordpress數據庫給wordpress使用,並建立用戶
修改wpuser權限,能夠管理wordpress庫

 

 
 

 


 
部署WordPress
下載wordpress
    https://cn.wordpress.org/download/   
注意。使用rpm方式實現lamp架構由於httpd php等版本更新較慢。下載wordpress時須要注意版本兼容問題。建議rpm安裝時下載舊版wordpress

unzip wordpress-4.9.4-zh_CN.zip -C /var/www/html

cd wordpress/

cp wp-config-sample.php wp-config.php

修改配置文件,添加數據庫帳號 vim wp-config.php

 

 
部署discuz 論壇

可在論壇中下載http://www.discuz.net/forum.php 

unzip Discuz_X3.3_SC_UTF8.zip -C /var/www/html解壓包

解壓完成進入upload目錄中可發現直接又install的目錄。

http://192.168.64.136/upload/install/ 在遊覽器中直接輸入開始安裝

 

 

有些目錄須要設置寫權限。須要配置權限web

 

setfacl -R -m u:apache:rw ./upload/sql

 

 

 

 

安裝完成數據庫

 
實現虛擬主機使用域名解析
搭建wordpress

寫入/etc/hosts 文件。加入域名
vim /etc/httpd/conf.d/test.conf 增長配置文件。 <virtualhost *:80> DocumentRoot "/var/www/html/wordpress" servername "www.a.com"

    <directory /var/www/html/wordpress> Require all granted </directory>

    </virtualhost> 添加以上字段。若是實現discurz論壇則須要修改discuz的目錄 將documentroot 指向discuz的目錄 curl www.a.com | less 測試鏈接成功


實現https 訪問apache

利用mod_ssl實現加密功能

yum install mod_ssl

安裝完成以後會自動生成公鑰和私鑰對,就自動完成了https加密的過程

 

 

 

 
搭建私有ca生成https功能
cd /etc/pki/CA目錄

(umask 066;openssl genrsa -out private/cakey.pem 2048)生成私鑰文件

生成自簽名證書並簽名

openssl req -new -x509 -key private/cakey.pem -out cacert.pem

 

建立ca的證書編號文件vim

touch index.txt後端

echo 01 > serial

客戶機生成私鑰,及證書申請文件,(我這裏是在本機操做)

(umask 077;openssl genrsa -out httpd.key 1024)

openssl req -new -key httpd.key -out httpd.csr

 

 

給生成的證書申請簽名

openssl ca -in /etc/httpd/conf.d/ssl/httpd.csr -out certs/httpd.crt -days 365

 

 

將生成證書和ca公鑰頒發,(這裏是拷貝,由於一臺機器。)

cp certs/httpd.crt /etc/httpd/conf.d/ssl

cp /etc/pki/CA/cacert.pem /etc/httpd/conf.d/ssl/

修改mod_ssl模塊的配置文件

vim /etc/httpd/conf.d/ssl.conf

修改證書文件路徑。和key路徑

和ca的公鑰路徑

 

到此就能夠利用https訪問網站了。

 

 

二、編譯安裝LAMP且PHP以FASTCGI的方式工做並使用XCache爲php加速

建議安裝順序httpd->mysql->php
下載httpd,php,mariadb,源碼包,由於新版httpd包不支持老版本的apr包因此還須要下載apr 和aprutil包


解壓縮

[root@centos7 ~]# tar xf apr-1.6.5.tar.bz2

[root@centos7 ~]# tar xf apr-util-1.6.1.tar.bz2

[root@centos7 ~]# tar xf httpd-2.4.37.tar.bz2

將新版apr複製到httpd目錄而且改名

[root@centos7 ~]# cp -r apr-1.6.5 httpd-2.4.37/srclib/apr

[root@centos7 ~]# cp -r apr-util-1.6.1 httpd-2.4.37/srclib/apr-util

下載開發包組用於編譯安裝

yum groupinstall "Development Tools" -y

安裝依賴包

yum install pcre-devel   openssl-devel expat-devel

進入httpd目錄開始編譯安裝cd httpd-2.4.37/

./configure --prefix=/app/httpd24 \

--enable-so \

--enable-ssl \

--enable-cgi \

--enable-rewrite \

--with-zlib \

--with-pcre \

--enable-modules=most \

--enable-mpms-shared=all \

--with-mpm=prefork \

--with-included-apr

make && make install 
解壓數據庫到/usr/local目錄中,建立軟鏈接,建立帳號及數據庫目錄

tar -xvf mariadb-10.2.15-linux-x86_64.tar.gz -C /usr/local/

ln -s mariadb-10.2.15-linux-x86_64/ mysql

useradd -s /sbin/nologin -r mysql -d /data/mysql

chown -R root.root mariadb-10.2.15-linux-x86_64/

mkdir /data/mysql

chown mysql.mysql /data/mysql

進入/usr/local/mysql/目錄執行初始化安裝腳本。生成數據庫文件

scripts/mysql_install_db --user=mysql --datadir=/data/mysql



 

自定義一個數據庫配置文件,而且修改數據庫路徑
mkdir /etc/mysql/

 cp support-files/my-huge.cnf /etc/mysql/my.cnf

mysqld下加入一行datadir=/data/mysql

 

將啓動腳本設置爲開機自啓動

 

 

 

加入環境變量
echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh

. /etc/profile.d/mysql.sh

建立數據庫並受權wordpress用戶,若是鏈接拒絕,也可使用root用鏈接。

 
編譯安裝php

須要安裝依賴包

yum install libxml2-devel bzip2-devel libmcrypt-devel (epel) 

解壓縮php。進入php目錄

tar xf php-7.1.18.tar.bz2

./configure --prefix=/app/php \

--enable-mysqlnd \

--with-mysqli=mysqlnd \

--with-openssl \

--with-pdo-mysql=mysqlnd \

--enable-mbstring \

--with-freetype-dir \

--with-jpeg-dir \

--with-png-dir \

--with-zlib \

--with-libxml-dir=/usr \

--enable-xml \

--enable-sockets \

--enable-fpm \

--with-config-file-path=/etc \

--with-config-file-scan-dir=/etc/php.d \

--enable-maintainer-zts \

--disable-fileinfo

make && make sintall 

生成配置文件和啓動腳本

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

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

cd /app/php/etc #進入php編譯完成後的目錄

cp php-fpm.conf.default php-fpm.conf #將範例文件名修改爲配置文件

cp php-fpm.d/www.conf.default php-fpm.d/www.conf

 

 

 

更改apache配置文件,使其可以支持php

 

vim /app/httpd24/conf/httpd.conf

取消下面兩行的註釋

LoadModule proxy_module modules/mod_proxy.so #開啓代理功能模塊

LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

在末尾加入

ProxyRequests Off #//是否開啓正向代理

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1 ##//開啓FCGI反向代理,//前面的/相對於後面的/var/www/html而言,後面的$1是指前面的/(.*\.php)

 

wordpress安裝

unzip wordpress-4.9.4-zh_CN.zip

將wordpress目錄中的文件移動至httpd的首頁目錄/app/httpd24/htdocs/

 

生成配置文件並修改配置文件的數據庫內容

mv wp-config-sample.php wp-config.php

運行mysql_secure_installation安全腳本生成密碼

 

 

寫入wordpress配置文件中。庫名和帳戶密碼。及主機

 

 

 

搭建成功

相關文章
相關標籤/搜索