0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取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服务器是不能处理动态请求,那么当用户发起动态请求时,Nginx又是如何进行处理的?

     当用户发起http请求时,请求会被Nginx处理,如果是静态资源请求Nginx则直接返回,如果是动态请求Nginx则通过fastcgi协议转交给后端的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)工作流程

①用户发送http请求报文给nginx服务器

②nginx会根据文件url和后缀来判断请求

③如果请求的是静态内容,nginx会将结果直接返回给用户

④如果请求的是动态内容,nginx会将请求交给fastcgi客户端,通过fastcgi_pass将这个请求发送给php-fpm管理进程,php-fpm管理进程接收到后会调用具体的工作进程warrap。

⑤warrap进程收到请求会生成新的线程调用php动态程序解析器。

⑥如果只是解析代码,php直接返回;如果有查询数据库操作,则由php连接数据库发起查询操作。

⑦最终数据由mysql->php->php-fpm->fastCGI->Nginx->user

2、LNMP架构环境部署

(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数据库(为什么不安装mysql------mariadb小,暂时用下数据库而已)
[root@Server-1 ~]# yum install mariadb-server mariadb -y

3、Nginx与php实现原理

在将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,serverlocation
(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找到对应的服务器

②根据fastcgi_param设置的SCRIPT_FILENAME变量中的fastcgi_spript_name(客户请求的文件)

③以上php解析的真实路径为/code/index.php发送给FastCGI

4、Nginx与php集成实现

(1)创建匹配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是否集成成功
#创建一个php文件
[root@server-1 ~]# cat /code/page.php
?phpspan
 phpinfo();
?>

#访问http://php.zxc.com/page.php,能访问就可以了

5、php与mariadb数据库(mysql也行)集成实现

(1)启动Mariadb数据库,并将其加入开机自启
[root@Server-1 ~]# systemctl start mariadb
[root@Server-1 ~]# systemctl enable mariadb
(2)给Mariadb配置登入密码,并使用新密码登入数据库
[root@Server-1 ~]# mysqladmin password ‘P@ssw0rd’
[root@Server-1 ~]# mysql -uroot -pP@ssw0rd
(3)准备一个php文件,测试能否正常连接数据库
[root@Server-1 ~]# cat /code/mariadb.php
?php$servername = "localhost";
    $username = "root";
    $password = "P@ssw0rd";

    // 创建连接
    $conn = mysqli_connect($servername, $username, $password);

    // 检测连接
    if (!$conn) {
        die("Connection failed: " . mysqli_connect_error());
    }
    echo "php连接MySQL数据库成功";
    ?>
    #只要访问该页面,出现 "php连接MySQL数据库成功"就说明成功了
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PHP
    PHP
    +关注

    关注

    0

    文章

    452

    浏览量

    26628
  • MYSQL数据库
    +关注

    关注

    0

    文章

    95

    浏览量

    9375
  • nginx
    +关注

    关注

    0

    文章

    142

    浏览量

    12152
收藏 人收藏

    评论

    相关推荐

    nginx重启命令linux步骤是什么?

    ./nginx -s reload 即可   方法二:查找当前nginx进程号,然后输入命令:kill -HUP 进程号 实现重启nginx服务   Nginx的整体
    发表于 07-10 16:40

    nginx重启命令linux步骤是什么?

    ./nginx -s reload 即可   方法二:查找当前nginx进程号,然后输入命令:kill -HUP 进程号 实现重启nginx服务   Nginx的整体
    发表于 07-11 17:13

    【NanoPi NEO试用体验】之安装配置Nginx环境WEB网站详解

    本帖最后由 Q69693721 于 2016-10-18 13:54 编辑 LNMP(Linux+Nginx+Mysql+PHP)相信学过计算机编程和网站的人应该都知道他一直是Linux环境下
    发表于 10-18 12:25

    基于MYSQL,PHP和nginx的部署论坛

    LNMP架构的简单应用-----部署论坛
    发表于 03-19 16:41

    基于Ubuntu的Django+uwsgi+nginx项目部署步骤

    Ubuntu 部署Django+uwsgi+nginx项目前 搭建必要环境
    发表于 07-09 09:36

    linux静态网页如何搭建

    搭建静态网站,首先需要部署环境。下面的步骤,将告诉大家如何在服务器上通过 Nginx 部署 HTTP 静态服务。
    发表于 07-18 06:50

    Nginx的安装和启动服务

    Mac上搭建直播服务器 Nginx+rtmp
    发表于 08-05 14:54

    Nginx服务器的搭建步骤

    搭建Nginx服务器②SSL加密网站③基于域名虚拟主机
    发表于 04-07 16:20

    玩转Firefly-RK3399资料汇总(一)

    窗口修改,参考第4点设置系统编码为[zh-CN.UTF-8]同样可以切换系统语言为中文更新系统源2、搭建LNMP服务环境LNMP代表的就是:Linux系统下Nginx+MySQL+PH
    发表于 04-13 15:09

    ECS配置lnmp的详细步骤资料说明

    本文档详细介绍的是ECS配置lnmp的详细步骤资料说明主要内容包括了:一、停止甚至删除系统上现有的web服务器软件,二、安装开发包和库文件,三、安装nginx,四、安装mariadb,五、安装php,六、最重要当然是测试一下了,
    发表于 03-04 15:48 6次下载
    ECS配置<b class='flag-5'>lnmp</b>的详细<b class='flag-5'>步骤</b>资料说明

    Nginx如何和现有监控系统集成

    搭建Nginx集群后,需要继续深入研究的就是日常Nginx监控。
    的头像 发表于 08-22 09:58 851次阅读

    Nginx如何监控

    搭建Nginx集群后,需要继续深入研究的就是日常Nginx监控。
    的头像 发表于 08-22 10:03 1369次阅读

    Nginx_LNMP架构拆分

    由于单台服务器运行LNMP架构会导致网站访问缓慢,当内存被吃满时,容易导致系统出现oom,从而kill掉MySQL数据库,所以需要将web和数据库进行独立部署。
    的头像 发表于 05-22 17:44 650次阅读
    <b class='flag-5'>Nginx_LNMP</b><b class='flag-5'>架构</b>拆分

    搭建Keepalived+Lvs+Nginx高可用集群负载均衡

    Server)实现高可用负载均衡 附:LVS的负载均衡算法 八、搭建Keepalived+Lvs+Nginx高可用集群负载均衡 一、Nginx安装 1、去官网http://nginx
    的头像 发表于 06-25 15:39 2746次阅读
    <b class='flag-5'>搭建</b>Keepalived+Lvs+<b class='flag-5'>Nginx</b>高可用集群负载均衡

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

    只用Tomcat,不用Nginx搭建Web服务,行不行?我曾经提出的愚蠢问题,今天详细给自己解释下,为什么必须用Nginx
    的头像 发表于 10-17 10:54 607次阅读