lamp架構

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

http協議介紹html

 

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

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

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

引入了POST命令和HEAD命令sql

頭信息是 ASCII 碼,後面數據可爲任何格式。服務器迴應時會告訴客戶端,數據是什麼格式,即Content-Type字段的做用。這些數據類型總稱爲MIME 多用途互聯網郵件擴展,每一個值包括一級類型和二級類型,預約義的類型,也可自定義類型, 常見Content-Type值:text/xml image/jpeg audio/mp3數據庫

http/1.1:1997年1月apache

引入了持久鏈接(persistent connection),即TCP鏈接默認不關閉,能夠被多個請求複用,不用聲明Connection: keep-alive。對於同一個域名,大多數瀏覽器容許同時創建6個持久鏈接vim

引入了管道機制(pipelining),即在同一個TCP鏈接裏,客戶端能夠同時發送多個請求,進一步改進了HTTP協議的效率windows

新增方法:PUT、PATCH、OPTIONS、DELETE

同一個TCP鏈接裏,全部的數據通訊是按次序進行的。服務器只能順序處理迴應,前面的迴應慢,會有許多請求排隊,形成"隊頭堵塞"(Head-of-line blocking)

爲避免上述問題,兩種方法:一是減小請求數,二是同時多開持久鏈接。網頁優化技巧,如合併腳本和樣式表、將圖片嵌入CSS代碼、域名分片(domain sharding)等

HTTP 協議不帶有狀態,每次請求都必須附上全部信息。請求的不少字段都是重複的,浪費帶寬,影響速度


 

 

 


 

 

 


 

 

 

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

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

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

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

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

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

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

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

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

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

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

元數據:請求報文首部

<method> <URL> <VERSION>

HEADERS 格式 name:value

<request body>

示例:

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

Server: Apache/2.4.7

HTTP經常使用請求方式,Method

GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS

四、訪問資源:

服務器獲取請求報文中請求的資源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

五、構建響應報文:

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

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

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

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

實際報文的主體內容

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

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

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

六、發送響應報文

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

七、記錄日誌

最後,當事務結束時,Web服務器會在日誌文件中添加一個條目,來描述已執行的事務

 

http 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.2:event 測試版,centos6默認

httpd-2.4:event 穩定版,centos7默認

 


實現步驟

安裝lamp包 httpd php,php-mysql mariadb-server

yum install httpd, php, php-mysql, mariadb-server

systemctl start httpd.service

systemctl start mariadb.service

 

https://www.phpmyadmin.net/files/4.0.10.20/ 下載phpmyadmin

 

 


 

解壓並進入目錄 將範例文件改名 ,默認密碼修改爲隨機的密碼,將phpmyadmin解壓至httpd根目錄而且爲了方便進入更改目錄名

mv phpMyAdmin-4.0.10.20-source pma #更改目錄名

mv config.sample.inc.php  config.inc.php #將範例文件改名

 


 

啓動數據庫,生成口令

systemctl restart mariadb

mysql_secure_installation #執行mysql安全腳本生成口令

 


 

yum install php-mbstring 安裝phpmyadmin的依賴包

systemctl restart httpd #從新啓動httpd服務

登陸數據庫名爲root,密碼爲運行安全腳本時本身設置的密碼。


 

 


 

建立wordpress數據庫給wordpress使用,並建立用戶


 

 


 

 

修改wpuser權限,能夠管理wordpress庫


wo

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

unzip wordpress-4.9.4-zh_CN.zip 解壓wordpress安裝包

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 解壓包

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

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

 


 

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


 

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

 


 

 


 

 

安裝完成


 

 


 

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

搭建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 訪問

利用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的證書編號文件

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訪問網站了。

windows由於沒有域名因此只能實現ip訪問


 

在虛擬機中能夠實現域名訪問


 

 

二、編譯安裝LAMP且PHP以FASTCGI的方式工做並使用XCache爲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配置文件中。庫名和帳戶密碼。及主機


 

 


 

搭建成功

相關文章
相關標籤/搜索