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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Nginx搭建流行架構LNMP的步驟

冬至子 ? 來源:運維庫 ? 作者:運維庫 ? 2023-05-22 18:19 ? 次閱讀

1、LNMP架構概述

(1)什么是LNMP?

? ? ?LNMP是一套技術的組合,L=Linux、N=Nginx、M=MySQL(MyriDB)、P=PHP(Python

(2)LNMP架構是如何工作的?

? ? ?首先Nginx服務器是不能處理動態(tài)請求,那么當用戶發(fā)起動態(tài)請求時,Nginx又是如何進行處理的?

? ? ?當用戶發(fā)起http請求時,請求會被Nginx處理,如果是靜態(tài)資源請求Nginx則直接返回,如果是動態(tài)請求Nginx則通過fastcgi協(xié)議轉交給后端的PHP程序處理,具體如下圖所示:

圖片

(3)Nginx與Fast-CGI詳細工作流程如下圖所示

圖片

Nginx結合PHP FastCGI運行原理圖

注:CGI全稱通用網關接口 Commmon Gateway Interface、php-fpm(fcgi process mangemnt)管理進程、php-fpm配置文件為php-fpm.conf、php解析器的配置文件為php.ini。

(4)工作流程

①用戶發(fā)送http請求報文給nginx服務器

②nginx會根據(jù)文件url和后綴來判斷請求

③如果請求的是靜態(tài)內容,nginx會將結果直接返回給用戶

④如果請求的是動態(tài)內容,nginx會將請求交給fastcgi客戶端,通過fastcgi_pass將這個請求發(fā)送給php-fpm管理進程,php-fpm管理進程接收到后會調用具體的工作進程warrap。

⑤warrap進程收到請求會生成新的線程調用php動態(tài)程序解析器。

⑥如果只是解析代碼,php直接返回;如果有查詢數(shù)據(jù)庫操作,則由php連接數(shù)據(jù)庫發(fā)起查詢操作。

⑦最終數(shù)據(jù)由mysql->php->php-fpm->fastCGI->Nginx->user

2、LNMP架構環(huán)境部署

(1)使用官方倉庫安裝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,啟動并加入開機自啟。
[root@Server-1 ~]# yum -y install nginx
[root@Server-1 ~]# systemctl start nginx
[root@Server-1 ~]# systemctl enable nginx
(2)使用第三方擴展原安裝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存儲庫 直接安裝PHP會報錯

[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

#啟動php-fpm,并將其加入開機自啟
[root@Server-1 ~]# systemctl start php-fpm
[root@Server-1 ~]# systemctl enable php-fpm
(3)安裝Mariadb數(shù)據(jù)庫(為什么不安裝mysql------mariadb小,暫時用下數(shù)據(jù)庫而已)
[root@Server-1 ~]# yum install mariadb-server mariadb -y

3、Nginx與php實現(xiàn)原理

在將Nginx與PHP集成的過程中,需要先了解FastCGI代理配置語法

(1)設置FastCGI服務器的地址,該地址可以指定為域名或者IP地址,以及端口
Syntax:  fastcgi_pass address;
  Default: 
  Context: location,if in location

  #語法示例
  fastcgi_pass localhost:9000;            #默認端口9000(建議使用這條)
  fastcgi_pass unix:/tmp/fastcgi.socket;  #適合在nginx和php在一臺服務器上(跨網絡的不行)
(2)設置fastcgi默認的首頁文件,需要結合fastcgi_param一起設置
Syntax:	fastcgi_index name;
  Default:	—
  Context:	http,server,location
(3)通過fastcgi_param設置變量,并將設置的變量傳遞到后端的fastcgi服務器
Syntax:  fastcgi_param paramter value [if_not_empty];
   Default: 
   Context: http,server,location
   
   #語法示例
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME /code$fastcgi_script_name;
(4)通過圖形方式展示fastcgi_index與fastcgi_param作用

圖片

①nginx通過php.zxc.com找到對應的服務器

②根據(jù)fastcgi_param設置的SCRIPT_FILENAME變量中的fastcgi_spript_name(客戶請求的文件)

③以上php解析的真實路徑為/code/index.php發(fā)送給FastCGI

4、Nginx與php集成實現(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)啟動php-fpm,并將其加入開機自啟
[root@Server-1 ~]# systemctl start php-fpm
[root@Server-1 ~]# systemctl enable php-fpm

#驗證php-fpm是否啟動,127.0.0.19000起來了就成功了
[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)測試nginx與php是否集成成功
#創(chuàng)建一個php文件
[root@server-1 ~]# cat /code/page.php
?phpspan
 phpinfo();
?>

#訪問http://php.zxc.com/page.php,能訪問就可以了

5、php與mariadb數(shù)據(jù)庫(mysql也行)集成實現(xiàn)

(1)啟動Mariadb數(shù)據(jù)庫,并將其加入開機自啟
[root@Server-1 ~]# systemctl start mariadb
[root@Server-1 ~]# systemctl enable mariadb
(2)給Mariadb配置登入密碼,并使用新密碼登入數(shù)據(jù)庫
[root@Server-1 ~]# mysqladmin password ‘P@ssw0rd’
[root@Server-1 ~]# mysql -uroot -pP@ssw0rd
(3)準備一個php文件,測試能否正常連接數(shù)據(jù)庫
[root@Server-1 ~]# cat /code/mariadb.php
?php$servername = "localhost";
    $username = "root";
    $password = "P@ssw0rd";

    // 創(chuàng)建連接
    $conn = mysqli_connect($servername, $username, $password);

    // 檢測連接
    if (!$conn) {
        die("Connection failed: " . mysqli_connect_error());
    }
    echo "php連接MySQL數(shù)據(jù)庫成功";
    ?>
    #只要訪問該頁面,出現(xiàn) "php連接MySQL數(shù)據(jù)庫成功"就說明成功了
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • PHP
    PHP
    +關注

    關注

    0

    文章

    452

    瀏覽量

    26630
  • MYSQL數(shù)據(jù)庫

    關注

    0

    文章

    95

    瀏覽量

    9375
  • nginx
    +關注

    關注

    0

    文章

    142

    瀏覽量

    12154
收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

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

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

    LNMP架構的簡單應用-----部署論壇
    發(fā)表于 03-19 16:41

    基于Ubuntu的Django+uwsgi+nginx項目部署步驟

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

    linux靜態(tài)網頁如何搭建

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

    Nginx的安裝和啟動服務

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

    Nginx服務器的搭建步驟

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

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

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

    ECS配置lnmp的詳細步驟資料說明

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

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

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

    Nginx如何監(jiān)控

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

    Nginx_LNMP架構拆分

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

    搭建Keepalived+Lvs+Nginx高可用集群負載均衡

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

    不用Nginx,只用Tomcat的Http請求流程

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