云计算运维 · 第二阶段 · nginx_LNMP搭建

本文详细介绍了LNMP架构(Linux、Nginx、MySQL、PHP)的工作原理,包括动态请求处理流程、环境配置步骤(如Nginx安装、统一权限、PHP集成、数据库配置等),以及如何扩展多台Web服务器和利用NFS分离静态资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习b记 · 第二阶段

六、LNMP架构

LNMP是一套技术的组合,L=Linux、N=Nginx、M~=MySQL、P~=PHP
1、LNMP架构是如何工作的
    首先Nginx服务是不能处理动态请求,那么当用户发起动态请求时, Nginx又是如何进行处理的。
    当用户发起http请求,请求会被Nginx处理,如果是静态资源请求Nginx则直接返回,如果是动态请求Nginx则通过fastcgi协议转交给后端的PHP程序处理

在这里插入图片描述

上图解析↑
1.用户通过http协议发起请求,请求会先抵达LNMP架构中的Nginx

2.Nginx会根据用户的请求进行判断,这个判断是有Location进行完成

3.判断用户请求的是静态页面,Nginx直接进行处理

4.判断用户请求的是动态页面,Nginx会将该请求交给fastcgi协议下发

5.fastgi会将请求交给php-fpm管理进程, php-fpm管理进程接收到后会调用具体的工作进程warrap

6.warrap进程会调用php程序进行解析,如果只是解析代码php直接返回

7.如果有查询数据库操作,则由php连接数据库(用户 密码 IP)发起查询的操作

8.最终数据由*mysql->php->php-fpm->fastcgi->nginx->http->user

在这里插入图片描述

图上面的是外网,每个设备还有内网的,但是在这结构体现出来没什么用,下一章负载均衡再说,但配置还是走的内网,我先写出来吧。

web01:172.16.1.202
web02:172.16.1.204
mariadb:172.16.1.208
nfs:172.16.1.203
#都是我自己设的 ip所以有点乱

①LNMP架构环境配置

上面这个图是最后结果的架构图,配置多台web服务器能提升更高的访问速度
1、使用官网仓库安装nginx
    #网址
    https://nginx.org/en/linux_packages.html#RHEL

    #创建nginx.repo,把下面的粘贴进去
    [root@web01 /]# vim /etc/yum.repos.d/nginx.repo
    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    #安装
    yum -y install nginx
2、统一用户权限
    #创建组和用户
    groupadd www -g 666
    useradd www -u 666 -g 666 -s /sbin/nologin  -M
    #修改配置文件
    sed -i '/^user/c user www;' /etc/nginx/nginx.conf
    #启动就可以了
    systemctl start nginx
    systemctl enable nginx
3、使用第三方扩展源安装php7.1
    #准备tar包直接拉到xshell
    #链接:https://pan.baidu.com/s/1BB1YbWXNadP6JJbnpJrXNw?pwd=kxxw 
    #提取码:kxxw
    #直接解压安装
    yum -y localinstall *
4、修改文件指定运行用户
    sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf 
    sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf
    #运行就行了
    systemctl start php-fpm
5、安装Mariadb数据库
    #这个直接yum安装就行不需要仓库
    yum install mariadb-server -y
    #安装完直接启动
    systemctl start mariadb
6、给Mariadb配置登陆密码
    mysqladmin password '123456'
    #登录测试一下
    mysql -uroot -p123456
7、nginx集成php进行使用
    #Fastcgi代理配置讲解就不写了直接上配置,想了解原理网上有的是
    
    #先把/etc/nginx/conf.d/default.conf删除,重新建一个文件
    rm -rf /etc/nginx/conf.d/default.conf
    
    vim /etc/nginx/conf.d/php.conf
    #把配置添加进去
    server {
        listen 80;
        server_name php.qxl.com;

        location / {
                root /tools;
                index index.php index.html;
        }

        location ~ \.php$ {
                root /code;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
     }
8、创建目录和php文件
    vim /tools/index.php
    #添加以下代码
    <?php
        phpinfo();
    ?>
9、把服务都重启运行测试
    #重启
    systemctl restart php-fpm nginx
    #测试
    浏览器直接输入ip或者做host解析输入网址php.qxl.com都可以
    访问出现php版本信息就可以了
10、测试php连接数据库
    vim /tools/mysql.php
    <?php
        $servername = "localhost";
        $username = "root";
        $password = "123456";

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

        // 检测连接
        if (!$conn) {
            die("Connection failed: " . mysqli_connect_error());
        }
        echo "php可以连接MySQL...";
    ?>
    #测试直接在浏览器ip或者域名后面加/mysql.php就可以
    显示php可以连接MySQL...就成功
    #做下面的安装服务,把刚才创建的 /etc/nginx/conf.d/这下面的东西都删了,重新写一个文件

②部署phpshe、phpMyAdmin产品

1、产品包下载
    #还是网盘分享
    链接:https://pan.baidu.com/s/1MIT6lP1gYSMjJSKF0-DZ1Q?pwd=kxxw 
    提取码:kxxw
    #放到/tools目录下解压
    直接把包拉到/tools
    #解压
    unzip phpshe1.8.zip -d phpshenn#目录没有就建 mkdir phpshe 要是解压出来就有文件夹就直接解压
    tar xf phpMyAdmin-4.9.11-all-languages.tar.gz
2、添加配置文件
    server {
            listen 80;
            server_name phpshe.qxl.com;

            location / { 
                    root /tools/phpshe;
                    index index.php index.html;
            }

            location ~ \.php$ {
                    root /tools/phpshe;
                    fastcgi_pass 127.0.0.1:9000;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                    include fastcgi_params;
                    include parames;
            }
          }
    
    server {
        listen 80;
        server_name phpmyadmin.qxl.com;

        location / {
                root /tools/phpmyadmin;
                index index.php index.html;
        }

        location ~ \.php$ {
                root /tools/phpmyadmin;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
                include parames;
        }
      }
      
      #还有一个模块优化 
      vim /etc/nginx/params 
      #把这些粘贴进去
      proxy_set_header Host $http_host;
      proxy_http_version 1.1;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

      proxy_connect_timeout 30;
      proxy_send_timeout 60;
      proxy_read_timeout 60;

      proxy_buffering on;
      proxy_buffer_size 32k;
      proxy_buffers 4 128k;

3、权限
	#都解压出来之后的目录结构就是这样的 
	/tools/phpmyadmin
	/tools/phpshe
	#不是这样的也可以 改配置文件或者修改目录都行 只要路径能对上就行
	#目录都给www权限,要不在运行的时候写入文件会报错
	chown -R www.www /tools
4、创建数据库
    mysql -uroot -p123456
    create database phpshe;
5、测试
    #直接windows测试就行,记得添加hosts解析
    访问域名出现安装页面就对了 phpmyadmin.qxl.com phpshe.qxl.com 这个 就是域名
    #测试的时候phpmyadmin会报一个权限错误有问题
    给一个权限就行了
    chown -R www.www #加目录

③拆分数据库至独立服务器

1、把web01的数据库导出一份
    mysqldump -uroot -p'123456' -A > mysql-all.sql
2、发送到mariadb服务器
    scp mysql-all.sql  root@172.16.1.208:/tools#放哪都行
3、你前面的mariadb的安装好在导入
    mysql -uroot -p'123456' < /tools/mysql-all.sql
4、授权
    #先重启一下
    systemctl restart mariadb
    #登录看一下
    mysql -uroot -p123456
    #授权从外部访问不用root用户,#将授权赋予给哪个用户,这个用户只能通过哪个网段过来(%所有) 'all'@'%'
    grant all on  *.* to qxl@'%' identified by '123456';
    flush privileges;flush privileges;
5、把web01上的服务重新制定一下数据库连接
    vim /etc/tools/phpshe/config.php
    #phpshe服务改成这样
    <?php
    $pe['db_host'] = '172.16.1.208'; //数据库主机地址#这里
    $pe['db_name'] = 'phpshe'; //数据库名称
    $pe['db_user'] = 'qxl'; //数据库用户名#这里
    $pe['db_pw'] = '123456'; //数据库密码
    $pe['db_coding'] = 'utf8';
    $pe['url_model'] = 'pathinfo_safe'; //url模式,可选项(pathinfo/pathinfo_safe/php)
    $pe['h5_host'] = ''; //手机版网址
    define('dbpre','pe_'); //数据库表前缀
    ?>
    #phpmyadmin也得改 这个改一下连接主机就可以
     vim /tools/phpmyadmin/libraries/config.default.php
     131 $cfg['Servers'][$i]['host'] = '172.16.1.208';
6、把web01上的mariadb服务关掉 重新刷新页面测试
    systemctl stop mariadb
    

④扩展多台相同的Web服务器

·为什么要扩展多台web节点
单台web服务器能抗住的访问量是有限的,配置多台web服务器能提升更高的访问速度。
1、创建用户www和上面的一样,复制就完了
    
2、安装php和nginx也是和上面的步骤一样
    
3、把配置文件复制过来一份
    #phpshe phpmyadmin
    scp -r /tools 172.16.1.204:/tools
    #同步一下nginx
    rsync -avz --delete /etc/nginx root@172.16.1.204:/etc/nginx
4、启动一下服务测试
    systemctl start nginx php-fpm
    #直接浏览器输入web02的ip就行 phpmyadmin那里还会报错 还是给目录www权限就行

⑤拆分资源至独立服务器NFS

·为什么拆分静态资源至独立存储服务器
当后端的web节点出现多台时,会导致用户上传的图片、视频附件等内容仅上传至一台web服务器,那么其他的web服务器则无法访问到该图片。
1、安装并配置nfs
    #这个前面的文章也有写
    yum install nfs-utils -y
    vim /etc/exports
    /data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
    
2、权限
    #/data 目录给一下666用户的权限
    chown -R www.www /data
3、直接挂载web01和web02的/tools
    #挂载之前先把tools里面的服务移出来 要是直接挂载会覆盖原来目录里面的文件 挂在完目录在移动回去
    mv /tools/ /
    mount -t nfs 172.16.1.203:/data /tools
    mv /phpshe /tools
    mv /phpmyadmin /tools
    #两个web都这么操作就行
4、还是浏览器测试,网页出来了就ok

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值