1、LNMP架構(gòu)概述
(1)什么是LNMP?
? ? ?LNMP是一套技術(shù)的組合,L=Linux、N=Nginx、M=MySQL(MyriDB)、P=PHP(Python)
(2)LNMP架構(gòu)是如何工作的?
? ? ?首先Nginx服務(wù)器是不能處理動(dòng)態(tài)請(qǐng)求,那么當(dāng)用戶發(fā)起動(dòng)態(tài)請(qǐng)求時(shí),Nginx又是如何進(jìn)行處理的?
? ? ?當(dāng)用戶發(fā)起http請(qǐng)求時(shí),請(qǐng)求會(huì)被Nginx處理,如果是靜態(tài)資源請(qǐng)求Nginx則直接返回,如果是動(dòng)態(tài)請(qǐng)求Nginx則通過(guò)fastcgi協(xié)議轉(zhuǎn)交給后端的PHP程序處理,具體如下圖所示:
(3)Nginx與Fast-CGI詳細(xì)工作流程如下圖所示
Nginx結(jié)合PHP FastCGI運(yùn)行原理圖
注:CGI全稱通用網(wǎng)關(guān)接口 Commmon Gateway Interface、php-fpm(fcgi process mangemnt)管理進(jìn)程、php-fpm配置文件為php-fpm.conf、php解析器的配置文件為php.ini。
(4)工作流程
①用戶發(fā)送http請(qǐng)求報(bào)文給nginx服務(wù)器
②nginx會(huì)根據(jù)文件url和后綴來(lái)判斷請(qǐng)求
③如果請(qǐng)求的是靜態(tài)內(nèi)容,nginx會(huì)將結(jié)果直接返回給用戶
④如果請(qǐng)求的是動(dòng)態(tài)內(nèi)容,nginx會(huì)將請(qǐng)求交給fastcgi客戶端,通過(guò)fastcgi_pass將這個(gè)請(qǐng)求發(fā)送給php-fpm管理進(jìn)程,php-fpm管理進(jìn)程接收到后會(huì)調(diào)用具體的工作進(jìn)程warrap。
⑤warrap進(jìn)程收到請(qǐng)求會(huì)生成新的線程調(diào)用php動(dòng)態(tài)程序解析器。
⑥如果只是解析代碼,php直接返回;如果有查詢數(shù)據(jù)庫(kù)操作,則由php連接數(shù)據(jù)庫(kù)發(fā)起查詢操作。
⑦最終數(shù)據(jù)由mysql->php->php-fpm->fastCGI->Nginx->user
2、LNMP架構(gòu)環(huán)境部署
(1)使用官方倉(cāng)庫(kù)安裝Nginx
[root@nginx ~]# cat /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
#安裝Nginx,啟動(dòng)并加入開(kāi)機(jī)自啟。
[root@Server-1 ~]# yum -y install nginx
[root@Server-1 ~]# systemctl start nginx
[root@Server-1 ~]# systemctl enable nginx
(2)使用第三方擴(kuò)展原安裝php7.1
#yum -y https://dl.fedoraprojeck.org/pub/epel/epel-release-latest-7.noarch.rpm
#yum -y https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
#安裝和啟用EPEL和Remi存儲(chǔ)庫(kù) 直接安裝PHP會(huì)報(bào)錯(cuò)
[root@Server-1 ~]# yum remove php-mysql-5.4 php php-fpm php-common
[root@Server-1 ~]# cat /etc/yum.repos.d/php.repo
[php]
name = php Repository
baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/
gpgcheck = 0
[root@Server-1 ~]# yum -y install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb
#啟動(dòng)php-fpm,并將其加入開(kāi)機(jī)自啟
[root@Server-1 ~]# systemctl start php-fpm
[root@Server-1 ~]# systemctl enable php-fpm
(3)安裝Mariadb數(shù)據(jù)庫(kù)(為什么不安裝mysql------mariadb小,暫時(shí)用下數(shù)據(jù)庫(kù)而已)
[root@Server-1 ~]# yum install mariadb-server mariadb -y
3、Nginx與php實(shí)現(xiàn)原理
在將Nginx與PHP集成的過(guò)程中,需要先了解FastCGI代理配置語(yǔ)法
(1)設(shè)置FastCGI服務(wù)器的地址,該地址可以指定為域名或者IP地址,以及端口
Syntax: fastcgi_pass address;
Default: —
Context: location,if in location
#語(yǔ)法示例
fastcgi_pass localhost:9000; #默認(rèn)端口9000(建議使用這條)
fastcgi_pass unix:/tmp/fastcgi.socket; #適合在nginx和php在一臺(tái)服務(wù)器上(跨網(wǎng)絡(luò)的不行)
(2)設(shè)置fastcgi默認(rèn)的首頁(yè)文件,需要結(jié)合fastcgi_param一起設(shè)置
Syntax: fastcgi_index name;
Default: —
Context: http,server,location
(3)通過(guò)fastcgi_param設(shè)置變量,并將設(shè)置的變量傳遞到后端的fastcgi服務(wù)器
Syntax: fastcgi_param paramter value [if_not_empty];
Default: —
Context: http,server,location
#語(yǔ)法示例
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /code$fastcgi_script_name;
(4)通過(guò)圖形方式展示fastcgi_index與fastcgi_param作用
①nginx通過(guò)php.zxc.com找到對(duì)應(yīng)的服務(wù)器
②根據(jù)fastcgi_param設(shè)置的SCRIPT_FILENAME變量中的fastcgi_spript_name(客戶請(qǐng)求的文件)
③以上php解析的真實(shí)路徑為/code/index.php發(fā)送給FastCGI
4、Nginx與php集成實(shí)現(xiàn)
(1)創(chuàng)建匹配php的配置文件
[root@Server-1 ~]# cat /etc/nginx/conf.d/phptest.conf
server {
listen 80;
server_name php.zxc.com;
root /code;
location / {
index index.php index.html;
}
location ~ \\.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
(2)啟動(dòng)php-fpm,并將其加入開(kāi)機(jī)自啟
[root@Server-1 ~]# systemctl start php-fpm
[root@Server-1 ~]# systemctl enable php-fpm
#驗(yàn)證php-fpm是否啟動(dòng),127.0.0.1:9000起來(lái)了就成功了
[root@Client-1 ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1039/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1213/master
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 16441/php-fpm: mast
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 14128/mysqld
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 746/rpcbind
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 16507/nginx: master
tcp6 0 0 :::22 :::* LISTEN 1039/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1213/master
tcp6 0 0 :::111 :::* LISTEN 746/rpcbind
(3)測(cè)試nginx與php是否集成成功
#創(chuàng)建一個(gè)php文件
[root@server-1 ~]# cat /code/page.php
?phpspan
phpinfo();
?>
#訪問(wèn)http://php.zxc.com/page.php,能訪問(wèn)就可以了
5、php與mariadb數(shù)據(jù)庫(kù)(mysql也行)集成實(shí)現(xiàn)
(1)啟動(dòng)Mariadb數(shù)據(jù)庫(kù),并將其加入開(kāi)機(jī)自啟
[root@Server-1 ~]# systemctl start mariadb
[root@Server-1 ~]# systemctl enable mariadb
(2)給Mariadb配置登入密碼,并使用新密碼登入數(shù)據(jù)庫(kù)
[root@Server-1 ~]# mysqladmin password ‘P@ssw0rd’
[root@Server-1 ~]# mysql -uroot -pP@ssw0rd
(3)準(zhǔn)備一個(gè)php文件,測(cè)試能否正常連接數(shù)據(jù)庫(kù)
[root@Server-1 ~]# cat /code/mariadb.php
?php$servername = "localhost";
$username = "root";
$password = "P@ssw0rd";
// 創(chuàng)建連接
$conn = mysqli_connect($servername, $username, $password);
// 檢測(cè)連接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "php連接MySQL數(shù)據(jù)庫(kù)成功";
?>
#只要訪問(wèn)該頁(yè)面,出現(xiàn) "php連接MySQL數(shù)據(jù)庫(kù)成功"就說(shuō)明成功了
-
PHP
+關(guān)注
關(guān)注
0文章
453瀏覽量
26709 -
MYSQL數(shù)據(jù)庫(kù)
+關(guān)注
關(guān)注
0文章
96瀏覽量
9408 -
nginx
+關(guān)注
關(guān)注
0文章
151瀏覽量
12188
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論