web架構——LAMP-fastcgi-php_fpm

LAMP L——linux;A——Apache;M——mysql、mariadb;P——PHP、Perl

一、靜態頁面與動態頁面(A)Apache

在我沒有學習web架構或者http相關知識前,在我的認知裏靜態頁面就是頁面是沒有動態畫面的只有一張張圖片,而動態頁面呢是看上去有各種絢麗的動畫就是動態頁面。後來學習web架構才知道之前的認知可以說是無知…

1.靜態頁面

在這裏插入圖片描述
當客戶端發送靜態頁面訪問請求後,服務器端會在自己存放靜態頁面的磁盤中取出靜態頁面,並封裝成響應報文發送給客戶端。

2.動態頁面

在這裏插入圖片描述
當客戶端發送動態請求時,服務器會首先加載靜態頁面,然後通過CGI來創建一個子進程,這個子進程是一個解釋器,如果用戶訪問的是一個php語言的動態頁面請求那麼這個CGI將會創建一個php的解釋器,讓解釋器將php腳本運行的結果返回給主進程,主進程再封裝成響應報文響應客戶端的請求。磁盤中的腳本可以是GO、python等一系列腳本語言,那麼對應的CGI接口將會創建一個對應腳本語言解釋器的進程。

CGI接口

在這裏插入圖片描述
CGI接口就是主進程創建子進程用來識別腳本語言對應編譯器的規範。
訪問步驟:識別請求—>創建進程—>處理請求—>銷燬進程,這樣會造成訪問步驟太多,方式後響應遲緩。

fastCGI接口

在這裏插入圖片描述由於普通的CGI響應步驟太過繁瑣並且處理速度也不是很理想,所以就出現了一種將CGI單獨設立爲一個服務器的服務,而這種服務就稱爲fastCGI Server,會成爲一個獨立的進程,當用戶發送動態網頁請求後,Apache接收請求並以客戶端的形式來請求fastCGI Server來處理動態請求,當fastCGI Server接收到請求後會使用對應的腳本語言編譯器的子進程來處理動態請求,而自己是不會工作的,類似於Apache的prefork模式(預派生模式,提前創建一定的進程),子進程處理結果後發送給Apache,Apache再使用http協議封裝爲響應報文將結果發送給客戶端,這種方法不會有創建進程銷燬進程的步驟,只需要Apache發送一個請求,其他的事請都會由fastCGI Server來處理所以相對於普通CGI訪問速度會有提升。

模塊方式

在這裏插入圖片描述
因爲Apache是高度模塊化的服務,可以直接將php作爲模塊裝載到Aapache上,這樣做的好處是讓Apache可以自己響應動態請求,但是壞處是在Apache運行時php模塊也會一直在運行,即使不用也會佔用內存空間,這樣會增加Apache自己的運行負擔。

二、存儲部分(M)MySQL、Mariadb

在這裏插入圖片描述
SQL系統(數據庫管理系統)是將原本管理數據的文件系統抽象成了數據庫管理系統,通過套接字來調用功能和API進行通信,每一個SQL都有自己的協議客戶端,不通融的數據庫管理系統要使用不同的協議客戶端,協議客戶端會自己調用API並提供給用戶交互式的界面和工具,工具就是像ls、cat可以直接使用。也可以使用命令來調用API。客戶端分爲命令行交互的客戶端,另一種是程序員通過調用API寫協議客戶端驅動連接數據庫。爲了提供方便,每一種語言都提供了一種協議驅動,所以就不用寫協議客戶端驅動來連接數據庫了,只需要調用該驅動模塊即可。當數據庫收到數據後會與文件系統交互,並做永久性存儲。

三、腳本語言解釋器(P)PHP、Perl

腳本編程語言,嵌入到html中的嵌入式web開發語言,在頁面中html的標籤使文本變得更美觀,在寫入html頁面時可以將php直接嵌入到html語句中。

1.MPM方式

作爲模塊掛載到Apache上
在這裏插入圖片描述

2.php-fpm

在這裏插入圖片描述
基於fastCGI協議生成的PHP-FPM的實現,就像http協議與apache的關係一樣,應用程序是實現協議的方式。當Apache收到訪問請求後,因爲網頁都是由靜態和動態結合的網頁,那麼Apache請求會首先處理靜態內容,然後將動態請求發送給PHP-FPM,PHP-FPM收到動態請求後,會在本地查找動態資源內容,找到動態內容資源後,根據動態資源的腳本連接數據庫與數據庫進行交互。

四、LAMP的實現(wordpress博客的安裝)

1.Mairadb的配置安裝

#安裝mariadb服務器端
[root@localhost ~]# yum -y install mariadb-server
#啓動mariadb
[root@localhost ~]# systemctl restart mariadb
#設置管理用戶,不允許其他用戶不經過驗證就登錄
[root@localhost ~]# mysqladmin -u root password
New password: 
Confirm new password: 
#登錄mariadb
[root@localhost ~]# mysql -u root -h localhost -p
Enter password: 
#創建wordpress的數據庫,因爲自己安裝的mariadb是沒有字符串的,需要手動配置,並且定義爲utf8字符集
MariaDB [(none)]> create database wdpress charset utf8;
#創建遠程登陸,並允許10.0.0.0/24網段登錄,遠程登陸名爲wduser密碼爲123.com,all是所有權限
MariaDB [(none)]> grant all on wdpress.* to 'wduser'@'10.0.0.%' identified by '123.com';
MariaDB [(none)]> exit

2.安裝php-fpm

[root@localhost ~]# yum -y install php-fpm php-mbstring php-mcrypt php-common php-mysql
php-mbstring:多字符集
php-mcrypt:加密解密庫,因爲fpm與Apache通信時需要加密解密信息
php-common:核心文件

#此文件是fpm的主配置文件
[root@localhost ~]# vim /etc/php-fpm.conf

#此文件是與httpd相連接的主配置文件
[root@localhost ~]# vim /etc/php-fpm.d/www.conf
listen = 10.0.0.2:9000							#fpm監聽端口和本地IP地址
listen.allowed_clients = 10.0.0.2				#監聽Apache的服務器IP地址
user = apache									#進程所屬用戶
group = apache									#進程所屬組
pm = dynamic									#模式,分爲static以及dynamic
	#static:創建出一定的子進程量,一直在等待,收到httpd請求後開始工作
	#dynamic:類似於httpd的prefork模式,每個子進程創建一個線程,在一個時間點只能處理一個請求,會有上限和下限。一段時間內沒有使用進程系統會自動減少
pm.max_children = 50							#最大連接數
pm.start_servers = 5							#啓動服務時的啓動進程數
pm.min_spare_servers = 5						#最小空閒進程
pm.max_spare_servers = 35						#最大空閒進程
;pm.max_requests = 500							#每個進程處理的最大請求數
ping.path = /ping								#測試與httpd是否可以通信
ping.response = pong							#可以通信返回的關鍵字
pm.status_path = /pmstatus						#fpm的狀態頁面
php_value[session.save_handler] = files			#用戶連接保存的文件
php_value[session.save_path] = /var/lib/php/session	#保存路徑

[root@localhost ~]# mkdir /var/lib/php/session	#創建保存路徑
[root@localhost ~]# chown apache:apache /var/lib/php/session/	#將屬組屬主更換爲apache

[root@localhost ~]# systemctl restart php-fpm			#重啓php-fpm服務,查看端口,監聽端口爲9000
[root@localhost ~]# netstat -anptu | grep "php-fpm"
tcp        0      0 10.0.0.2:9000           0.0.0.0:*               LISTEN      98604/php-fpm: mast 

3.安裝配置Apache

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
添加以下內容:
	DocumentRoot "/data/www/html"
	        proxyRequests off
	        #關閉正向代理
	        ProxyPassMatch ^/(.*\.php)$ fcgi://10.0.0.2:9000/data/www/html/$1
	        #指定動態路徑的內容
	        #ProxyPassMatch ^/(ping|pmstatus.*)$ fcgi://10.0.0.2:9000/$1
	        #顯示php-fpm的狀態頁
	<Directory "/data/www/html">
	        Options FollowSymLinks
	        AllowOverride None
	        Require all granted
	</Directory>
	
[root@localhost ~]# systemctl restart php-fpm
[root@localhost ~]# systemctl restart mariadb
[root@localhost ~]# systemctl restart httpd

4.測試PHP-FPM是否已經啓用

在這裏插入圖片描述
連接成功,並且顯示爲FPM/FastCGI,表示現在已經成功啓用FPM並且使用的是FastCGI。

5.配置安裝wordpress博客軟件

#使用lzrsz工具將wordpress工具傳入到服務器中
#解壓數據包,使用unzip工具
[root@localhost ~]# unzip wordpress4.7.3.zip 
[root@localhost ~]# cd wordpress4.7.3/
[root@localhost wordpress4.7.3]# mv wordpress/ /data/www/html/
[root@localhost wordpress4.7.3]# cd /data/www/html/wordpress/
[root@localhost wordpress]# cp -p wp-config-sample.php wp-config.php
[root@localhost wordpress]# vim wp-config.php
	// ** MySQL 設置 - 具體信息來自您正在使用的主機 ** //
	/** WordPress數據庫的名稱 */
	define('DB_NAME', 'wdpress');
	
	/** MySQL數據庫用戶名 */
	define('DB_USER', 'wduser');
	
	/** MySQL數據庫密碼 */
	define('DB_PASSWORD', '123.com');
	
	/** MySQL主機 */
	define('DB_HOST', '10.0.0.2');
	
[root@localhost ~]# systemctl restart php-fpm
[root@localhost ~]# systemctl restart mariadb
[root@localhost ~]# systemctl restart httpd

6.測試博客是否可以正常使用

1)填寫用戶信息

在這裏插入圖片描述

2)登錄

在這裏插入圖片描述

3)寫一篇屬於自己的博客

在這裏插入圖片描述

4)查看博客

在這裏插入圖片描述

5)查看數據庫

因爲博客是與數據庫相連接的,當然是可以在數據庫查看到用戶信息等一系列的信息啦!在頁面上的用戶信息存儲到數據庫中了,這就叫做動態頁面了!
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章