0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Nginx搭建流行架構(gòu)LNMP的步驟

冬至子 ? 來(lái)源:運(yùn)維庫(kù) ? 作者:運(yùn)維庫(kù) ? 2023-05-22 18:19 ? 次閱讀

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.19000起來(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ō)明成功了
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • PHP
    PHP
    +關(guān)注

    關(guān)注

    0

    文章

    453

    瀏覽量

    26709
  • MYSQL數(shù)據(jù)庫(kù)

    關(guān)注

    0

    文章

    96

    瀏覽量

    9408
  • nginx
    +關(guān)注

    關(guān)注

    0

    文章

    151

    瀏覽量

    12188
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    nginx重啟命令linux步驟是什么?

    ./nginx -s reload 即可   方法二:查找當(dāng)前nginx進(jìn)程號(hào),然后輸入命令:kill -HUP 進(jìn)程號(hào) 實(shí)現(xiàn)重啟nginx服務(wù)   Nginx的整體
    發(fā)表于 07-10 16:40

    nginx重啟命令linux步驟是什么?

    ./nginx -s reload 即可   方法二:查找當(dāng)前nginx進(jìn)程號(hào),然后輸入命令:kill -HUP 進(jìn)程號(hào) 實(shí)現(xiàn)重啟nginx服務(wù)   Nginx的整體
    發(fā)表于 07-11 17:13

    【NanoPi NEO試用體驗(yàn)】之安裝配置Nginx環(huán)境WEB網(wǎng)站詳解

    本帖最后由 Q69693721 于 2016-10-18 13:54 編輯 LNMP(Linux+Nginx+Mysql+PHP)相信學(xué)過(guò)計(jì)算機(jī)編程和網(wǎng)站的人應(yīng)該都知道他一直是Linux環(huán)境下
    發(fā)表于 10-18 12:25

    基于MYSQL,PHP和nginx的部署論壇

    LNMP架構(gòu)的簡(jiǎn)單應(yīng)用-----部署論壇
    發(fā)表于 03-19 16:41

    基于Ubuntu的Django+uwsgi+nginx項(xiàng)目部署步驟

    Ubuntu 部署Django+uwsgi+nginx項(xiàng)目前 搭建必要環(huán)境
    發(fā)表于 07-09 09:36

    linux靜態(tài)網(wǎng)頁(yè)如何搭建

    搭建靜態(tài)網(wǎng)站,首先需要部署環(huán)境。下面的步驟,將告訴大家如何在服務(wù)器上通過(guò) Nginx 部署 HTTP 靜態(tài)服務(wù)。
    發(fā)表于 07-18 06:50

    Nginx的安裝和啟動(dòng)服務(wù)

    Mac上搭建直播服務(wù)器 Nginx+rtmp
    發(fā)表于 08-05 14:54

    Nginx服務(wù)器的搭建步驟

    搭建Nginx服務(wù)器②SSL加密網(wǎng)站③基于域名虛擬主機(jī)
    發(fā)表于 04-07 16:20

    玩轉(zhuǎn)Firefly-RK3399資料匯總(一)

    窗口修改,參考第4點(diǎn)設(shè)置系統(tǒng)編碼為[zh-CN.UTF-8]同樣可以切換系統(tǒng)語(yǔ)言為中文更新系統(tǒng)源2、搭建LNMP服務(wù)環(huán)境LNMP代表的就是:Linux系統(tǒng)下Nginx+MySQL+PH
    發(fā)表于 04-13 15:09

    ECS配置lnmp的詳細(xì)步驟資料說(shuō)明

    本文檔詳細(xì)介紹的是ECS配置lnmp的詳細(xì)步驟資料說(shuō)明主要內(nèi)容包括了:一、停止甚至刪除系統(tǒng)上現(xiàn)有的web服務(wù)器軟件,二、安裝開(kāi)發(fā)包和庫(kù)文件,三、安裝nginx,四、安裝mariadb,五、安裝php,六、最重要當(dāng)然是測(cè)試一下了,
    發(fā)表于 03-04 15:48 ?6次下載
    ECS配置<b class='flag-5'>lnmp</b>的詳細(xì)<b class='flag-5'>步驟</b>資料說(shuō)明

    Nginx如何和現(xiàn)有監(jiān)控系統(tǒng)集成

    搭建Nginx集群后,需要繼續(xù)深入研究的就是日常Nginx監(jiān)控。
    的頭像 發(fā)表于 08-22 09:58 ?893次閱讀

    Nginx如何監(jiān)控

    搭建Nginx集群后,需要繼續(xù)深入研究的就是日常Nginx監(jiān)控。
    的頭像 發(fā)表于 08-22 10:03 ?1422次閱讀

    Nginx_LNMP架構(gòu)拆分

    由于單臺(tái)服務(wù)器運(yùn)行LNMP架構(gòu)會(huì)導(dǎo)致網(wǎng)站訪問(wèn)緩慢,當(dāng)內(nèi)存被吃滿時(shí),容易導(dǎo)致系統(tǒng)出現(xiàn)oom,從而kill掉MySQL數(shù)據(jù)庫(kù),所以需要將web和數(shù)據(jù)庫(kù)進(jìn)行獨(dú)立部署。
    的頭像 發(fā)表于 05-22 17:44 ?686次閱讀
    <b class='flag-5'>Nginx_LNMP</b><b class='flag-5'>架構(gòu)</b>拆分

    搭建Keepalived+Lvs+Nginx高可用集群負(fù)載均衡

    Server)實(shí)現(xiàn)高可用負(fù)載均衡 附:LVS的負(fù)載均衡算法 八、搭建Keepalived+Lvs+Nginx高可用集群負(fù)載均衡 一、Nginx安裝 1、去官網(wǎng)http://nginx
    的頭像 發(fā)表于 06-25 15:39 ?3037次閱讀
    <b class='flag-5'>搭建</b>Keepalived+Lvs+<b class='flag-5'>Nginx</b>高可用集群負(fù)載均衡

    不用Nginx,只用Tomcat的Http請(qǐng)求流程

    只用Tomcat,不用Nginx搭建Web服務(wù),行不行?我曾經(jīng)提出的愚蠢問(wèn)題,今天詳細(xì)給自己解釋下,為什么必須用Nginx!
    的頭像 發(fā)表于 10-17 10:54 ?657次閱讀