精华内容
下载资源
问答
  • LNMP架构的搭建Discuz论坛的搭建LNMP架构的搭建Discuz论坛的搭建
  • LNMP架构

    千次阅读 2021-08-14 18:20:16
    文章目录一、LNMP架构基本概念1.1 什么是LNMP1.2 LNMP实现过程1.3 LNMP实现细节二、LNMP架构环境安装2.1 nginx安装2.2 php安装2.3 MySQL安装三、3.LNMP架构环境配置3.1 Fastcgi代理语法3.2 Nginx集成PHP3.3 PHP集成...

    文章目录

    一、LNMP架构基本概念

    1.1 什么是LNMP

    • LNMP 是一套技术的组合,L=Linux、N=Nginx、M=[MySQL8.0|Mariadb5.5]、P=[PHP|Python]
    • nginx仅支持解析html文件;图片传输;视频传输;不支持 php、python、java等脚本文件

    1.2 LNMP实现过程

    当用户请求http://www.bertwu.com/index.php时,对于nginx服务器而言,是无法处理.php这样的脚本,那么nginx如何配置,才支持这样的动态请求呢?
    第一步:当用户发起 HTTP 请求,请求首先被 Nginx 接收;
    第二步:Nginx 通过预先定义好的 location 规则进行匹配;
    第三步:Nginx 将匹配到的动态内容,通过 fastcgi 协议传到给后端的 php 应用服务处理
    在这里插入图片描述

    1.3 LNMP实现细节

    1.用户首先通过 http 协议发起请求,请求会先抵达Nginx;
    2.Nginx 根据用户的请求进行 Location 规则匹配;
    3.Location 如果匹配到请求是静态,则由 Nginx 读取本地直接返回;
    4.Location如果匹配到请求是动态,则由Nginx将请求转发给fastcgi协议;
    5.fastgi收到后会将请求交给php-fpm管理进程;
    6.php-fpm管理进程接收到后会调用具体的worker工作进程, worker进程会调用php解析器解析代码,php解析后直接返回
    7.如果有查询数据库操作,则由php连接数据库(用户 密码 IP)发起查询的操作
    8.用户->http->nginx->fastcgi->php-fpm->php->tcp->mysql
    9.最终数据由mysql->tcp->php->php-fpm->fastcgi->nginx->http->user
    在这里插入图片描述

    二、LNMP架构环境安装

    2.1 nginx安装

    1.使用官方仓库安装Nginx
    详见:nginx安装
    2.配置 Nginx 进程运行用户

    [root@web01 nginx]# groupadd -g 666 www
    [root@web01 nginx]# useradd -u 666 -g 666 www
    [root@web01 nginx]sed -i '/^user/c user www;' /etc/nginx/nginx.conf
    

    3.启动nginx,并加入开机自启

    [root@web01 nginx]# systemctl start nginx 
    [root@web01 nginx]# systemctl enable nginx
    

    2.2 php安装

    方式1. 手动新增 repo 文件,但是速度很慢,建议本地安装

    # 手动配置yum源
    [root@oldxu ~]# cat /etc/yum.repos.d/php.repo
    [webtatic-php]
    name = php Repository
    baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/
    gpgcheck = 0
    

    2.卸载系统中存在的低版本php

    [root@web01 ~]# yum remove php-mysql-5.4 php php-fpm php-common
    

    3.安装高版本的 php

    [root@oldxu ~]# 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
    

    方式2. 下载包到本地,上传服务器解压到~目录,执行命令(推荐这种方式)
    php下载:
    链接:https://pan.baidu.com/s/1xFqGMSywuY7Pe4CHVETc_Q
    提取码:nlgp
    安装:

    [root@web01 ~]# yum localinstall ~/php/*.rpm
    

    4.配置php-fpm用户与Nginx的运行用户保持一致

    [root@web01 ~]# sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf 
    [root@web01 ~]# sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf
    

    5.启动php-fpm 并将其加入开机自启

    [root@web01 ~]# systemctl start php-fpm
    [root@web01 ~]# systemctl enable php-fpm
    

    2.3 MySQL安装

    1.安装 Mariadb 数据库

    [root@web01 ~]# yum install mariadb-server mariadb -y
    

    2.启动 Mariadb 数据库, 并加入开机自动

    [root@web01 ~]# systemctl start mariadb
    [root@web01 ~]# systemctl enable mariadb
    

    3.查看是否启动成功

    [root@web01 nginx]# netstat -lntp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      12022/php-fpm: mast 
    tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      12388/mysqld        
    tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      538/rpcbind         
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1353/nginx: master  
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      875/sshd            
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1018/master         
    tcp6       0      0 :::111                  :::*                    LISTEN      538/rpcbind         
    tcp6       0      0 :::22                   :::*                    LISTEN      875/sshd            
    tcp6       0      0 ::1:25                  :::*                    LISTEN      1018/master         
    [root@web01 nginx]# 
    

    可以看到mysql在3306端口,php监听在127.0.0.1:9000上是为了减少本机随机端口的损耗。

    三、LNMP架构环境配置

    在配置 Nginx 与 PHP 集成之前, 我们需要先了解 Nginx 的 Fastcgi 代理配置语法

    3.1 Fastcgi代理语法

    1.设置 fastcgi 服务器的地址,该地址可以指定为域名或IP地址,以及端口

    Syntax: fastcgi_pass address;
    Default: —
    Context: location, if in location
    
    #语法示例
    fastcgi_pass localhost:9000;
    

    2.设置fastcgi默认的首页文件,需要结合fastcgi_param一起设置

    Syntax: fastcgi_index name;
    Default: —
    Context: http, server, location
    

    3.通过fastcgi_param设置变量,并将设置的变量传递到后端的fastcgi服务

    Syntax: fastcgi_param parameter value [if_not_empty];
    Default: —
    Context: http, server, location
    
    #语法示例
    fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    

    4.通过图形方式展示fastcgi_index与fastcgi_param作用。
    在这里插入图片描述

    3.2 Nginx集成PHP

    1.创建php.conf文件

    [root@web01 ~]# cat /etc/nginx/conf.d/php.conf 
    server {
    	listen 80;
    	server_name php.bertwu.com;
    	root /code/php;
    	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 /etc/nginx/fastcgi_params;
    	}
    }
    
    

    2.创建/code目录修改属组属主为www用户

    [root@web01 ~]# chown -R www.www /code
    

    3.创建/code/php/index.php文件

    [root@web01 php]# cat /code/php/index.php 
    <?php
    	phpinfo();
    ?>
    [roo
    
    [root@web01 ~]# systemctl reload nginx
    
    

    4.修改win hosts文件,然后浏览器访问 http://php.bertwu.com/
    在这里插入图片描述

    3.3 PHP集成MySQL

    1.安装mysql见上文mariadb
    2. 为默认用户root设置密码

    [root@web01 ~]# mysqladmin password '123456'
    

    3.登录

    [root@web01 ~]# mysql -u root -p 123456
    MariaDB [(none)]> show databases; # 查看系统默认的库
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    4 rows in set (0.00 sec)
    
    MariaDB [(none)]> use test; # 选择库
    Database changed
    MariaDB [test]> show tables; # 查看test库中的表
    
    Empty set (0.00 sec)
    
    MariaDB [test]> 
    
    

    4.编写php脚本测试连接mysql数据库,如果能成功,说明php与mysql的集成环境搭建成功。

    [root@web01 ~]# cat /code/php/mysqli.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数据库成功";
    ?>
    

    5.使用 php 命令直接解析文件

    
    [root@web01 ~]# php /code/php/mysqli.php 
    php连接MySQL数据库成功
    

    6.也可以通过浏览器访问 /mysqli.php 文件,获取解析结果
    在这里插入图片描述

    四、LNMP架构在单台主机上部署开源产品

    4.1 部署开源知乎产品Wecenter

    1.配置Nginx
    配置 Nginx 虚拟主机站点,域名为 zh.bertwu.net

    [root@web01 conf.d]# cat zh.conf 
    server {
    	listen 80;
    	server_name zh.bertwu.net;
    	root /code/zh;
    	
    	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.检查语法,重新启动nginx

    [root@web01 conf.d]# nginx -t
    [root@web01 conf.d]# systemctl restart nginx
    

    3.下载Wecenter
    4. 解压到/code/zh目录,并且修改权限

    [root@web01 ~]# chown -R www.www /code/zh
    

    5.创建数据库
    由于wecenter产品需要依赖数据库, 所以需要手动建立数据库

    [root@oldxu ~]# mysql -uroot -p123456
    mysql> create database zh;
    mysql> exit
    

    6.配置hosts文件,浏览器访问zh.bertwu.net

    在这里插入图片描述


    4.2 部署开源博客系统wordpress

    1.获取wordpress产品,解压并部署 wordress
    wordpress官网
    或者用wget下载

    [root@web01 ~]# wget https://cn.wordpress.org/latest-zh_CN.tar.gz
    

    2.解压到 /code/目录下,解压后本身就带wordpress文件夹,所以不需要手动创建

    [root@web01 ~]# tar -xf latest-zh_CN.tar.gz -C /code
    

    3.授权目前目录的权限与进程运行身份保持一致,php,nginx服务都应该用相同的(www用户)身份运行,避免权限过低

    [root@web01 ~]# chown -R www.www /code/wordpress/
    

    4.nginx站点配置

    [root@web01 conf.d]# cat wordpress.conf 
    server {
    	listen 80;
    	server_name blog.bertwu.net;
    	client_max_body_size 100m;
    	root /code/wordpress;
    	charset utf-8;
    	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 /etc/nginx/fastcgi_params;
    	}
    }
    

    5.检测语法,并重启 nginx 服务

    [root@web01 conf.d]# nginx -t
    [root@web01 conf.d]# systemctl restart nginx
    

    6.配置MySQL
    由于wordpress产品需要依赖数据库, 所以需要手动建立数据库

    [root@oldxu ~]# mysql -uroot -p123456
    mysql> create database wordpress;
    mysql> exit
    

    7.配置hosts文件,浏览器访问blog.bertwu.net
    在这里插入图片描述

    4.3 部署相亲站点OElove

    1.下载软件包OElove官网
    也可以命令行下载

    [root@web01 ~]# wget http://dl.oephp.com/oelove/source/OElove_Free_v8.1.R210428.zip
    

    2.解压到/code/love目录(解压后自己带了个目录upload,建议先解压到/tmp中,然后再手动移动到/code/love中),并修改权限

    [root@web01 tmp]# chown -R www.www /code/love
    

    3.配置nginx站点

    [root@web01 conf.d]# cat love.conf 
    server {
    	listen 80;
    	server_name love.bertwu.net;
    	root /code/love;
    	charset utf-8;
    	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 /etc/nginx/fastcgi_params;
    	}
    }
    

    4.检测语法,并重启 nginx 服务

    [root@web01 conf.d]# nginx -t
    [root@web01 conf.d]# systemctl restart nginx
    

    5.配置mysql,创建love数据库

    [root@oldxu ~]# mysql -uroot -p123456
    mysql> create database love;
    mysql> exit
    

    6.配置hosts文件,浏览器访问love.bertwu.net
    根据安装向导页面展示的实验数据地址下载实验数据,解压到/code/love目录中,以便于显示网站上的图片。

    [root@web01 tmp]# wget http://dl.oephp.com/data/free_data.zip
    [root@web01 tmp]# unzip free_data.zip -d /code/love
    

    8.访问
    在这里插入图片描述

    4.4 部署商城网站ShopXO

    1.下载ShopXO官网
    也可以命令下载

    [root@web01 202108]# wget https://gitee.com/zongzhige/shopxo/repository/archive/v2.1.0.zip
    
    

    2.解压到/code/shop目录,并修改权限

    [root@web01 tmp]# chown -R www.www /code/shop
    

    3.配置nginx站点

    [root@web01 conf.d]# cat shop.conf 
    server {
    	listen 80;
    	server_name shop.bertwu.net;
    	charset utf-8;
    	root /code/shop;
    	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 /etc/nginx/fastcgi_params;
    	}
    }
    

    4.检测语法,并重启 nginx 服务

    [root@web01 conf.d]# nginx -t
    [root@web01 conf.d]# systemctl restart nginx
    

    5.配置mysql,创建shop数据库

    [root@oldxu ~]# mysql -uroot -p123456
    mysql> create database shop;
    mysql> exit
    

    6.修改hosts文件,访问站点shop.bertwu.net
    在这里插入图片描述
    7.报错解决方案
    /code/shop/runtime/log/当天日期的 .log 文件中查看错误信息

    [ 2021-08-15T14:38:44+08:00 ] 10.0.0.1 GET shop.bertwu.net/admin.php
    [ error ] [2]session_start(): open(/var/lib/php/session/sess_0a394ba31263333b5af7cc3459be7dd9, O_RDWR) failed: Permission denied (13)
    

    发现没有权限,于是可以修改权限

    [root@web01 202108]# pwd
    /code/shop/runtime/log/202108
    [root@web01 202108]# ll -d /var/lib/php/session/
    drwxrwx--- 2 root apache 6 Sep 12  2019 /var/lib/php/session/
    [root@web01 202108]# chown -R www.www /var/lib/php/session/
    

    8.再次访问,成功。
    在这里插入图片描述

    五、LNMP架构多台主机部署开源项目

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

    为何要拆分数据库

    由于单台服务器运行 LNMP 架构会导致网站访问缓慢,当系统内存被吃满时,很容易导致系统出现oom,从而kill掉MySQL数据库,所以需要将web和数据库进行独立部署。

    拆分数据库能解决什么问题

    1. 缓解web网站的压力;
    2. 增强数据库读写性能;
    3. 提高用户访问的速度;

    5.2 数据库拆分架构演变

    在这里插入图片描述

    5.3 环境准备

    主机名应用环境外网内网
    web01nginx+php10.0.0.7172.16.1.7
    db01mysql(mariadb)172.16.1.51

    5.4 数据库实现步骤

    5.4.1 web服务操作如下

    1.备份 web01 上的数据库

    [root@web01 ~]# mysqldump -uroot -p123456 --all-databases > /tmp/data.sql
    

    2.将 web01 上备份的数据库拷贝至 db01 服务器上

    [root@web01 ~]# rsync  -avz  /tmp/data.sql root@172.16.1.51:/root
    或者
    [root@web01 ~]# scp  /tmp/data.sql root@172.16.1.51:/root
    

    5.4.2 数据库服务器db01操作如下

    1.安装mariadb数据库,并加入开机自启

    [root@db01 ~]## yum install mariadb mariadb-server
    [root@db01 ~]# systemctl start mariadb
    [root@db01 ~]# systemctl enable mariadb
    [root@db01 ~]# netstat -lntp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      995/master          
    tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1542/mysqld         
    tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      567/rpcbind  
    

    2.将 web01 服务器上推送的数据库备份文件恢复至 db01 服务器新数据库中

    [root@db01 ~]# mysql -uroot < /root/data.sql 
    

    3.数据库导入完成后,重启数据库,使用新密码进行登录,并检查数据库已被导入成功

    [root@db01 ~]# systemctl restart mariadb
    [root@db01 ~]# mysql -uroot -p123456
    MariaDB [(none)]> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | love               |
    | mysql              |
    | performance_schema |
    | shop               |
    | test               |
    | wordpress          |
    | zh                 |
    +--------------------+
    8 rows in set (0.00 sec)
    
    MariaDB [(none)]> 
    
    

    3.在新数据库上授权,允许172.16.1.%网段,通过 web01 账户密码123456连接并操作该数据库
    因为mysql默认不支持远程连接,需要创建一个新用户并开启远程连接的权限。

    # 默认没开启远程连接权限,所以在web01上是无法连接的
    [root@web01 tmp]# mysql -h 172.16.1.51 -uroot -p123456
    ERROR 1130 (HY000): Host '172.16.1.7' is not allowed to connect to this MariaDB server
    
    
    # 在db01上开启远程连接权限(当然也可以先创建用户,后授予权限)
    MariaDB [(none)]> grant all privileges on *.* to 'web01'@'172.16.1.%' identified by '123456';
    
    
    # 开启后重新连接,发现已经能连接了。
    [root@web01 tmp]# mysql -h 172.16.1.51 -uweb01 -p123456
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 6
    Server version: 5.5.68-MariaDB MariaDB Server
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    MariaDB [(none)]> 
    
    

    mysql 配置权限语法解释:

    1.查看权限
      语法:show grants for 'username'@'hostname'
      例如:查看root用户的权限
          show grants for 'root'@'localhost'
    
    2.授予权限
       语法:grant 权限类型1,权限类型1.... on  数据库名.表
            to  'username'@'hostname' [,'username'@'hostname'][with grant option] 
      		所有库中所有表用  *.* 表示
    
    
      例如:新创建test04 用户 密码test04
           create user 'test04'@'localhost' identified by '密码'
           授予所有库下所有表的查询  删除权限
           grant select ,delete on *.* to 'test04'@'localhost' with grant option
          	
          	授予所有权限
          	grant all privileges on.........
           	开启所有网段
           	'name'@'%'
           
           查看test04的权限
           show grants for 'test04'@'localhost'
    
    3.收回权限
       revoke  权限类型1,权限类型2.... on 库名.表名
       from 'username'@hostname'' [,'username'@hostname'']...
    
     例如:收回test04的delete权限
        revoke delete on *.* from 'test04'@'localhost'
    

    5.6停止web01上的数据库服务,让它不在提供数据库服务,启用新的数据库

    [root@web01 ~]# systemctl stop mariadb
    [root@web01 ~]# systemctl disable mariadb
    Removed symlink /etc/systemd/system/multi-user.target.wants/mariadb.service.
    

    5.7 修改web01上部署的项目代码,让其指向新数据库db01

    注:由于安装部署开源软件时候有安装向导,它会自动创建脚本文件连接我们的数据库,实际生产环境中需要我们自己手动写或者开发写脚本,由于我们不知道具体是哪个文件包含数据库连接信息,可以用find命令查找
    例如

    [root@web01 ~]# find /code/wordpress/ -type f | xargs grep "123456"
    

    这样就可以列出包含密码的文件,但是由于123456很多文件都有,所以建议事先设计数据库密码时候要有标识
    1.修改 Wordpress 产品代码连接数据库的配置文件

    [root@web01 ~]# vim /code/wordpress/wp-config.php
    define( 'DB_NAME', 'wordpress' );
    
    /** MySQL database username */
    define( 'DB_USER', 'web01' );
    
    /** MySQL database password */
    define( 'DB_PASSWORD', '123456' );
    
    /** MySQL hostname */
    define( 'DB_HOST', '172.16.1.51' );
    
    

    2.修改 wecenter 产品代码连接数据库的配置文件

    [root@web01 ~]# vim /code/zh/system/config/database.php 
    
    <?php
    
    $config['charset'] = 'utf8';^M
    $config['prefix'] = 'aws_';^M
    $config['driver'] = 'MySQLi';^M
    $config['master'] = array (
      'charset' => 'utf8',
      'host' => '172.16.1.51',
      'username' => 'web01',
      'password' => '123456',
      'dbname' => 'zh',
    );^M
    $config['slave'] = false;^M                           
    

    3.修改 OElove 产品代码连接数据库的配置文件

    [root@web01 ~]# vim /code/love/source/conf/db.inc.php 
    
    define('DB_TYPE', 'mysql');
    ///数据库编码
    define('DB_CHARSET', 'utf8');
    ///数据库服务器
    define('DB_HOST', '172.16.1.51:3306');
    ///数据库名
    define('DB_DATA', 'love');
    ///数据库登录帐号
    define('DB_USER', 'web01');
    ///数据库登录密码
    define('DB_PASS', '123456');
    ///数据表前缀
    define('DB_PREFIX', 'oepre_');
    ///数据库持久连接 0=关闭, 1=打开
    

    4.修改OXshop产品配置信息

    [root@web01 ~]# vim /code/shop/config/database.php 
    return [
        // 数据库类型
        'type'            => 'mysql',
        // 服务器地址
        'hostname'        => '172.16.1.51',
        // 数据库名
        'database'        => 'shop',
        // 用户名
        'username'        => 'web01',
        // 密码
        'password'        => '123456',
        // 端口
        'hostport'        => '3306',
    
    

    5.由于停止了web01服务器上的数据库服务,网站都不能访问了,但是经过上述配置后,浏览器又能访问了。

    六、扩展多台相同的Web服务器组成web集群

    6.1 为何要扩展多台web节点

    单台web服务器能抗住的访问量是有限的,而且单一的添加硬件配置并不能解决端口不够的问题。配置多台web服务器能提升更高的访问速度。
    扩展多台节点解决什么问题
    1.单台web节点如果故障,会导致业务down机;
    2.多台web节点能保证业务的持续稳定,扩展性高;
    3.多台web节点能有效的提升用户访问网站的速度;

    6.2 扩展多web节点架构演变

    在这里插入图片描述

    6.3 扩展多web节点环境准备

    主机名称应用环境外网地址内网地址
    web01nginx+php10.0.0.7172.16.1.7
    web02nginx+php10.0.0.8172.16.1.8
    db01mysql(mariadb)172.16.1.51

    6.4 扩展多台web节点实现步骤

    可以根据web01上的配置,快速扩展一台web02,数据库统一使用db01。

    6.4.1 创建相同用户身份便于运行进程

    [root@web02 ~]# groupadd -g 666 www
    [root@web02 ~]# useradd -g 666 -u 666 www
    

    6.4.2 安装nginx

    由于安装nginx需要手动配置源,可以从web01上拖过来

    [root@web02 ~]# rsync -avz root@172.16.1.7:/etc/yum.repos.d/nginx.repo /etc/yum.repos.d/
    
    安装yum优先级插件
    yum install yum-priorities
    
    在想优先检测的repo文件中加入
    priority=1 
    #数字越小,优先级越高
    
    
    [root@web01 ~]# vim /etc/yum/pluginconf.d/priorities.conf 
    确定这个配置文件里的 enabled = 1
    yum clean all
    yum makecache
    
    就可以优先从我们指定的源里安装了
    
    [root@web02 ~]# yum install nginx
    [root@web02 ~]# systemctl start nginx
    [root@web02 ~]# systemctl enable nginx
    Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
    [root@web02 ~]# 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:111             0.0.0.0:*               LISTEN      539/rpcbind         
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1847/nginx: master  
    
    nginx 依赖安装
    yum install -y gcc gcc-c++ autoconf pcre pcre-devel make automake httpd-toolsyum install -y gcc gcc-c++ autoconf pcre pcre-devel make automake httpd-tools
    

    6.4.3 安装php

    安装见上文

    把包下载下来放入~目录解压
    [root@web02 ~]# unzip php.zip
    安装
    [root@web02 ~]# yum localinstall php/*.rpm
    

    6.4.4 nginx与php配置导入

    [root@web02 php-fpm.d]# rsync -avz root@172.16.1.7:/etc/nginx /etc
    [root@web02 ~]# rsync -avz root@172.16.1.7:/etc/php-fpm.d /etc
    [root@web02 conf.d]# rsync -avz root@172.16.1.7:/etc/php.ini /etc
    

    6.4.5 将web01 上部署的所有代码打包上传到web02

    1.在web01上打包
    [root@web01 /]# cd / && tar czf /tmp/code.tar.gz /code/
    2.推送
    [root@web01 /]# scp -rp /tmp/code.tar.gz root@172.16.1.8:/tmp
    3. 在web02上解压
    [root@web02 ~]# tar -xf code.tar.gz -C /
    

    如果要部署商城项目需要再次修改权限

    [root@web02 ~]# chown -R www.www /var/lib/php/session/
    

    6.4.6 在web02上启动nginx与php并加入开机自启

    [root@web02 ~]# systemctl start nginx
    [root@web02 ~]# systemctl enable nginx
    [root@web02 ~]# systemctl start php-fpm
    [root@web02 ~]# systemctl enable php-fpm
    [root@web02 ~]# netstat -nlpt
    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:111             0.0.0.0:*               LISTEN      539/rpcbind         
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1847/nginx: master  
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      861/sshd            
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1020/master         
    tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      2092/php-fpm: maste 
    

    6.4.7 修改本地hosts文件,浏览器访问测试。

    10.0.0.8 zh.bertwu.net
    10.0.0.8 blog.bertwu.net
    10.0.0.8 love.bertwu.net
    10.0.0.8 shop.bertwu.net
    

    七、拆分静态资源至独立服务器

    7.1 为何要拆分静态资源

    当后端的 web 节点出现多台时,如果用户上传的图片、视频附件等内容仅在一台 web 服务器上,由于负载均衡,下一次访问会随机调度到其他节点,那么其他的 web 服务器则无法访问到该图片。
    如果增加一台共享存储能解决什么问题
    1.保证了多台 web 节点静态资源一致。
    2.有效节省多台 web 节点的存储空间。
    3.统一管理静态资源,便于后期推送至 CDN 进行静态资源加速

    7.2 拆分静态资源架构演变

    在这里插入图片描述

    7.3 增加共享存储nfs环境准备

    主机名称应用环境外网地址内网地址
    web01nginx+php10.0.0.7172.16.1.7
    web02nginx+php10.0.0.8172.16.1.8
    db01mysql(mariadb)172.16.1.51
    nfsnfs172.16.1.32

    7.4 共享存储实现步骤

    7.4.1 配置nfs 建议另外配置硬盘

    1.创建www用户
    [root@nfs ~]# groupadd -g 666 www
    [root@nfs ~]# useradd -g 666 -u 666 www
    [root@nfs ~]# yum install nfs-utils -y
    2.修改nfs配置文件修改
    [root@nfs ~]# cat /etc/exports
    /data/blog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
    /data/zh 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
    /data/love 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
    /data/shop 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
    
    3.添加一块新硬盘
    [root@nfs ~]# lsblk
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   50G  0 disk 
    ├─sda1   8:1    0  500M  0 part /boot
    ├─sda2   8:2    0    2G  0 part [SWAP]
    └─sda3   8:3    0 47.6G  0 part /
    sdb      8:16   0 1000G  0 disk 
    sr0     11:0    1  4.4G  0 rom 
    
    4.制作文件系统
    [root@nfs ~]# mkfs.xfs /dev/sdb
    [root@nfs data]# mkdir /data
    
    5.挂载
    [root@nfs data]# mount -t xfs /dev/sdb /data
    [root@nfs data]# echo '/dev/sdb /data xfs defaults 0 0' >>/etc/fstab
    [root@nfs data]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    devtmpfs        476M     0  476M   0% /dev
    tmpfs           487M     0  487M   0% /dev/shm
    tmpfs           487M  7.6M  479M   2% /run
    tmpfs           487M     0  487M   0% /sys/fs/cgroup
    /dev/sda3        48G  1.8G   46G   4% /
    /dev/sda1       497M  125M  373M  25% /boot
    tmpfs            98M     0   98M   0% /run/user/0
    /dev/sdb       1000G   33M 1000G   1% /data
    
    6.创建对应文件夹并修改权限
    [root@nfs data]# mkdir /data/{blog,zh,love,shop}
    [root@nfs data]# chown -R www.www /data
    
    [root@nfs data]# ll
    total 0
    drwxr-xr-x 2 www www 6 Aug 15 22:25 blog
    drwxr-xr-x 2 www www 6 Aug 15 22:25 love
    drwxr-xr-x 2 www www 6 Aug 15 22:25 shop
    drwxr-xr-x 2 www www 6 Aug 15 22:25 zh
    7.加入开机自启
    [root@nfs data]# systemctl start nfs-server
    [root@nfs data]# systemctl enable nfs-server
    
    

    7.4.2 导入静态资源至共享存储

    1.web01节点安装nfs,然后使用showmount查看服务端共享的资源;

    [root@web01 ~]# yum install nfs-utils -y
    [root@web01 ~]# showmount -e 172.16.1.32
    Export list for 172.16.1.32:
    /data/shop 172.16.1.0/24
    /data/love 172.16.1.0/24
    /data/zh   172.16.1.0/24
    /data/blog 172.16.1.0/24
    

    2.查找Wordpress静态资源推送过去然后再挂载

    在这里插入图片描述
    可以看到静态资源存储目录为http://blog.bertwu.net/wp-content/uploads/2021/08/16290384211-3.png

    1.web02上事先有图片需要先推送一下
    [root@web02 wordpress]# rsync -avz /code/wordpress/wp-content/uploads/ root@172.16.1.32:/data/blog
    
    [root@web02 wordpress]# mount -t nfs 172.16.1.32:/data/blog /code/wordpress/wp-content/uploads/
    [root@web02 wordpress]# df -h
    Filesystem              Size  Used Avail Use% Mounted on
    devtmpfs                476M     0  476M   0% /dev
    tmpfs                   487M     0  487M   0% /dev/shm
    tmpfs                   487M  7.6M  479M   2% /run
    tmpfs                   487M     0  487M   0% /sys/fs/cgroup
    /dev/sda3                48G  2.5G   46G   6% /
    /dev/sda1               497M  125M  373M  25% /boot
    tmpfs                    98M     0   98M   0% /run/user/0
    172.16.1.32:/data/blog 1000G   40M 1000G   1% /code/wordpress/wp-content/uploads
    
    # 开机自启挂载
    [root@web01 ~]echo '172.16.1.32:/data/blog /code/wordpress/wp-content/uploads nfs defaults 0 0' >> /etc/fstab
    
    2.web01上没有图片直接远程挂载
    [root@web01 wp-content]# mount -t nfs 172.16.1.32:/data/blog /code/wordpress/wp-content/uploads/
    [root@web01 wp-content]# df -h
    Filesystem              Size  Used Avail Use% Mounted on
    devtmpfs                476M     0  476M   0% /dev
    tmpfs                   487M     0  487M   0% /dev/shm
    tmpfs                   487M  7.6M  479M   2% /run
    tmpfs                   487M     0  487M   0% /sys/fs/cgroup
    /dev/sda3                48G  3.3G   45G   7% /
    /dev/sda1               497M  125M  373M  25% /boot
    tmpfs                    98M     0   98M   0% /run/user/0
    172.16.1.32:/data/blog 1000G   40M 1000G   1% /code/wordpress/wp-content/uploads
    # 开机自启挂载
    [root@web01 ~]echo '172.16.1.32:/data/blog /code/wordpress/wp-content/uploads nfs defaults 0 0' >> /etc/fstab
    

    八、展节点带来的新问题

    如果我们添加了一台C应用服务器,如何能实现快速扩展?
    1.准备LNP环境
    2.拷贝任意A或B上的配置文件,代码
    3.挂载NFS存储

    现在有多个WEB服务器,该如何进行访问?
    1.DNS轮询
    (1)需要所有的web节点具备公网IP地址
    (2)公网独立IP需要费用,而且不便宜。
    (3)所有的web节点有公网IP,不安全。
    (4)DNS只有轮询机制,没有健康检查功能。
    2.负载均衡
    (1)所有的web节点不需要有公网IP,能节省成本、并保证安全
    (2)能够对后端的web节点进行健康检查机制;
    (3)负载均衡有多种调度算法来满足企业不同需求;

    	rr;wrr;url_hash;ip_hash;一致性hash;
    

    在这里插入图片描述

    展开全文
  • 这篇文章从无到有的介绍了基于linux+mysql+nginx+php+memcache架构的Discuz论坛系统
  • Centos 7.4 Lnmp(源码安装) 架构(Nginx 1.15.9 PHP 7.1.31 Mysql 5.7.25) ,部署glpi 9.4.3
  • 本次实验是在LNMP架构——php+nginx+mysql源码编译搭建lnmp环境基础上进行的,lnmp架构已经搭建好,接下来我将以搭建论坛并且客户使用论坛为例,演示整个过程。 文章目录一、前言二、搭建Discuz论坛实验环境实验 一...
  • 1、一、lnmp(lamp)的定义 apache一般是把php当做自己的一个模块来启动;而ngnix则是把http请求变量转发给php进程,即php独立进程,与ngnix通信,这种方式叫做FastCGI运行方式。 apache所编译的php不能用于ngnix。 ...

    1、一、lnmp(lamp)的定义
    apache一般是把php当做自己的一个模块来启动;而ngnix则是把http请求变量转发给php进程,即php独立进程,与ngnix通信,这种方式叫做FastCGI运行方式。
    apache所编译的php不能用于ngnix。

    lamp=linux+apache+mysql+php
    lnmp=linux+nginx+mysql+php  
    

    LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。
    Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo等。
    Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
    Mysql是一个小型关系型数据库管理系统。
    PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。
    这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统
    二、lnmp的工作原理
    工作流程:
    1:client(http协议发起请求)-Nginx(location判断为静态页面请求)->html->client
    2.:client(http协议发起请求)-Nginx(location判断为动态页面请求)->fastcgi协议快速通用网关接口->php-fpm(php进程管理)->调用wapper工作进程->调用php解析->进入MySQL->-返回过程->php-fpm->fastcgi->nginx->http->client工作完成

    在这里插入图片描述
    FastCGI
    CGI全称是"通用网关接口"(Common Gateway Interface),web服务器与你的或其它机器上的程序进行"交谈"的一种工具,其程序一般运行在网络服务器上。 CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等。
    FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后将结果返回给HTTP服务器。这在处理高并发访问时几乎是不可用的。另外传统的CGI接口方式安全性也很差,现在已经很少使用了。
    FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能
    Nginx+FastCG
    Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)。
        wrapper: 为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接收到请求,然后Fork(派生)出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据(html页面或者图片)发送给客户端。这就是Nginx+FastCGI的整个运作过程
    PHP-FPM
    PHP-FPM(PHP FastCGI Process Manager)意:PHP FastCGI 进程管理器,用于管理PHP 进程池的软件,用于接受web服务器的请求。
    PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。
    在这里插入图片描述
    三、首先配置MySQL组件
    yum安装和编译安装的区别
    yum安装会把所有的模块都安装进去,不管使用不使用都会安装
    手动编译安装,安装服务的时候需要什么就编译安装什么模块,这样系统比较干净
    MySQL源码编译安装要求虚拟机内存硬盘大小不能小于20G否则的话编译过程会出问题,而且速度缓慢,为了加快速度,可以增加CPU核数和内存大小
    实验环境

    主机信息	                        主机功能
    虚拟机server1(172.25.254.1)	 用来搭建lnmp架构
    真机(172.25.24.66)	             用来测试
    

    3.1软件安装
    安装之前先安装gcc
    mysql没有configure.可以使用cmake执行安装编译
    注意每次编译失败都要把目录下的CMzkeCache.txt这个缓存文件删掉
    在这里插入图片描述

    [root@server1 mysql-5.7.30]#
    指定mysql安装位置 
    cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql \
     -DMYSQL_UNIX_ADDR=/usr/local//lnmp/mysql/data/mysql.sock  \套接字文件存放位置,程序入口
     -DMYSQL_DATADIR=/usr/local/lnmp/mysql/data \
     -DEXTRA_CHARSETS=all \添加扩展
     -DDEFAULT_CHARSET=utf8\添加默认字符节
     -DDEFAULT_COLLATION=utf8_general_ci \ mysql存储引擎 
     -DWITH_MYISAM_STORAGE_ENGINE=1 \
     -DWITH_INNOBASE_STORAGE_ENGINE=1\ 
     -DWITH_MEMORY_STORAGE_ENGINE=1 
     -DWITH_READLINE=1\ 
     -DENABLED_LOCAL_INFILE=1 \ 加载本地数据
     -DMYSQL_USER=mysql \ 使用mysql用户运行程序
     -DMYSQL_TCP_PORT=3306\ 指定默认端口号
     -DWITH_BOOST=boost/boost_1_59_0/
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

     yum install -y gcc-c++
    

    在这里插入图片描述
    在这里插入图片描述
    清除缓存文件继续预编译安装
    在这里插入图片描述

    在这里插入图片描述
    3.2修改文件权限
    在这此前必须创建mysql用户
    在这里插入图片描述

    ln -s /usr/local/lnmp/mysql/bin/* /usr/local/bin/再做个软连接
    

    3.3配置服务文件

    [root@server1 mysql-5.7.30]# cd /usr/local/lnmp/mysql/ 进入生成的mysql目录
    

    在这里插入图片描述

    [root@server1 include]# cp default_my.cnf /etc/my.cnf 复制文件
    cp: overwrite ‘/etc/my.cnf’? y
    
    [root@server1 include]# cd /usr/local/lnmp/mysql/support-files/ 进入此目录
    [root@server1 support-files]# cp -a mysql.server /etc/init.d/mysqld  复制文件
    [root@server1 support-files]# chmod +x /etc/init.d/mysqld  添加可执行权限
    [root@server1 support-files]# chkconfig mysqld on  配置开机启动
    [root@server1 support-files]# systemctl status mysqld.service   查看服务状态
    ● mysqld.service - LSB: start and stop MySQL
       Loaded: loaded (/etc/rc.d/init.d/mysqld; bad; vendor preset: disabled)
       Active: inactive (dead)
         Docs: man:systemd-sysv-generator(8)
    

    在这里插入图片描述
    3.4初始化及启动服务mysql
    在这里插入图片描述

    [root@server1 support-files]# systemctl start mysqld
    [root@server1 support-files]# mysql_secure_installation 
    

    在这里插入图片描述
    后的的流程都是y然后回车
    在这里插入图片描述
    查看数据库,到此数据库搭建完成

    php搭建过程
    php安装

    [root@server1 ~]# tar zxf php-7.4.1.tar.gz 
    [root@server1 ~]# cd php-7.4.1/
    [root@server1 php-7.4.1]# ls
    appveyor             build          CODING_STANDARDS.md  CONTRIBUTING.md  EXTENSIONS  NEWS                 php.ini-production  run-tests.php  tests   UPGRADING            Zend
    azure                buildconf      configure            docs             LICENSE     pear                 README.md           sapi           travis  UPGRADING.INTERNALS
    azure-pipelines.yml  buildconf.bat  configure.ac         ext              main        php.ini-development  README.REDIST.BINS  scripts        TSRM    win32
    [root@server1 php-7.4.1]# ./configure 
    --prefix=/usr/local/lnmp/php 
    --with-config-file-path=/usr/local/lnmp/php/etc 
    --with-mysqli=/usr/local/lnmp/mysql/bin/mysql_config 
    --enable-soap --enable-mbstring=all 
    --enable-sockets 
    --with-pdo-mysql=/usr/local/lnmp/mysql 
    --enable-gd --without-pear --enable-fpm
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    php服务配置
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    以上就是lnmp架构这种php服务 的搭建流程
    接下来搭建nginx服务

    ./configure 
    --prefix=/usr/local/lnmp/nginx 
    --with-http_ssl_module 
    --with-http_stub_status_module 
    --user=nginx --group=nginx
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    nginx服务配置
    在这里插入图片描述
    隐藏nginx版本号

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    减小nginx软件包大小,节约系统空间
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    编辑nginx的配置文件添加默认访问页面包含php页面
    [root@server1 lnmp]# vim nginx/conf/nginx.conf 
    

    在这里插入图片描述
    **打开nginx的动态请求 **
    在这里插入图片描述
    在这里插入图片描述
    访问测试
    在这里插入图片描述

    [root@server1 html]# curl -I 172.25.254.1
    HTTP/1.1 200 OK
    Server: nginx
    Date: Thu, 14 May 2020 20:30:41 GMT
    Content-Type: text/html; charset=UTF-8
    Connection: keep-alive
    X-Powered-By: PHP/7.4.1
    

    在这里插入图片描述

     cmake 
     -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql  
     -DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock 
      -DMYSQL_DATADIR=/usr/local/lnmp/mysql/data  -DEXTRA_CHARSETS=all  
      -DDEFAULT_CHARSET=utf8  -DDEFAULT_COLLATION=utf8_general_ci  
      -DWITH_MYISAM_STORAGE_ENGINE=1  
      -DWITH_INNOBASE_STORAGE_ENGINE=1 
       -DWITH_MEMORY_STORAGE_ENGINE=1  
       -DWITH_READLINE=1  
       -DENABLED_LOCAL_INFILE=1  
       -DMYSQL_USER=mysql 
       -DMYSQL_TCP_PORT=3306 
       -DWITH_BOOST=boost/boost_1_59_0/
    
    展开全文
  • LNMP架构介绍 LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。Nginx中的PHP是以fastcgi的方式结合Nginx的,可以理解为Nginx代理了PHP的fastcgi。 LNMP工作模式 说明: 和LAMP不同的是,...

    LNMP架构介绍


    LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。Nginx中的PHP是以fastcgi的方式结合Nginx的,可以理解为Nginx代理了PHP的fastcgi。

    LNMP工作模式

    è¿éåå¾çæè¿°
    说明:


    和LAMP不同的是,提供web服务的是Nginx
    并且php是作为一个独立服务存在的,这个服务叫做php-fpm
    Nginx直接处理静态请求,动态请求会转发给php-fpm

    CGI、FastCGI、PHP-CGI与PHP-FPM概念
    CGI


    CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。 
    CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等。

    FastCGI
    FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算,即FastCGI程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。 
    FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail-Over特性等等。

    FastCGI特点
    1,FastCGI具有语言无关性

    2,FastCGI在进程中的应用程序,独立于核心web服务器运行,提供了一个比API更安全的环境。APIs把应用程序的代码与核心的web服务器链接在一起,这意味着在一个错误的API的应用程序可能会损坏其他应用程序或核心服务器。 恶意的API的应用程序代码甚至可以窃取另一个应用程序或核心服务器的密钥。

    3,FastCGI技术目前支持语言有:C/C++、Java、Perl、Tcl、Python、SmallTalk、Ruby等。相关模块在Apache, ISS, Lighttpd等流行的服务器上也是可用的。

    4,FastCGI的不依赖于任何Web服务器的内部架构,因此即使服务器技术的变化, FastCGI依然稳定不变。

    FastCGI工作原理
    1,Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)

    2,FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。

    3,当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。

    4,FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。

    FastCGI的不足
    因为是多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。 
    Nginx 0.8.46+PHP 5.2.14(FastCGI)服务器在3万并发连接下,开启的10个Nginx进程消耗150M内存(15M* 10=150M),开启的64个php-cgi进程消耗1280M内存(20M *64=1280M),加上系统自身消耗的内存,总共消耗不到2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500M。

    PHP-CGI
    PHP-CGI是PHP自带的FastCGI管理器。

    PHP-CGI的不足
    1,php-cgi变更php.ini配置后需重启php-cgi才能让新的php-ini生效,不可以平滑重启。

    2,直接杀死php-cgi进程,php就不能运行了。(PHP-FPM和Spawn-FCGI就没有这个问题,守护进程会平滑从新生成新的子进程。)

    PHP-FPM
    PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download 下载。 
    PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。 
    PHP5.3.3已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多有点,所以被PHP官方收录了。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。

    Spawn-FCGI
    Spawn-FCGI是一个通用的FastCGI管理服务器,它是lighttpd中的一部份,很多人都用Lighttpd的Spawn-FCGI进行FastCGI模式下的管理工作,不过有不少缺点。而PHP-FPM的出现多少缓解了一些问题,但PHP-FPM有个缺点就是要重新编译,这对于一些已经运行的环境可能有不小的风险(refer),在php 5.3.3中可以直接使用PHP-FPM了。 
    Spawn-FCGI目前已经独成为一个项目,更加稳定一些,也给很多Web 站点的配置带来便利。已经有不少站点将它与nginx搭配来解决动态网页。 
    注: 最新的Spawn-FCGI可以到lighttpd.net网站搜索“Spawn-FCGI”找到它的最新版本发布地址。

    PHP-FPM与spawn-CGI对比
    PHP-FPM的使用非常方便,配置都是在PHP-FPM.ini的文件内,而启动、重启都可以从php/sbin/PHP-FPM中进行。更方便的是修改php.ini后可以直接使用PHP-FPM reload进行加载,无需杀掉进程就可以完成php.ini的修改加载。 
    结果显示使用PHP-FPM可以使php有不小的性能提升。PHP-FPM控制的进程cpu回收的速度比较慢,内存分配的很均匀。 
    Spawn-FCGI控制的进程CPU下降的很快,而内存分配的比较不均匀。有很多进程似乎未分配到,而另外一些却占用很高。可能是由于进程任务分配的不均匀导致的。而这也导致了总体响应速度的下降。而PHP-FPM合理的分配,导致总体响应的提到以及任务的平均。


    原文:https://blog.csdn.net/MrDing991124/article/details/78957217 
     

    展开全文
  • LNMP架构原理

    千次阅读 2019-10-17 10:25:10
    要了解LNMP架构原理,首先你得知道LNMP架构是啥? LNMP = Linux +Nginx + MySQL + PHP 现在有两种主流得架构,一个是今天要讲的 LNMP , 还有一个就是 LAMP。简单说明一下, LAMP = Linux + Apache + MySQL +PHP ...

    要了解LNMP架构原理,首先你得知道LNMP架构是啥?

    LNMP = Linux +Nginx + MySQL + PHP

    现在有两种主流得架构,一个是今天要讲的 LNMP , 还有一个就是 LAMP。简单说明一下, LAMP = Linux + Apache + MySQL +PHP

    先来讲一下 LNMP 大概的一个原理,先有一个整体的感知:

    在这里插入图片描述

    其实上图已经说得挺清楚了,可能会有一些核心概念不太懂,比如什么是FastCGI,什么是wrapper之类的,请听我细细讲来:

    FastCGI : 一句话来说的话就是 Http服务器和动态脚本语言实现高速通信的接口。FastCGI 是 C/S结构,可以将http服务器和脚本解析服务器分离开,同时在脚本解析服务器上开启一个或多个解析守护进程。这样可以使http服务器专注于处理静态请求,遇到".php"之类的动态请求直接通过FastCGI 往脚本解析服务器扔,极大的提高了系统的性能。

    • 在这可能有一个概念不太清楚,什么是守护进程?
      守护进程就是一个特殊的进程,这个进程特殊在哪里呢?一般的进程都需要终端去控制,而守护进程却是独立于终端的 ,一般来说系统启动的时候守护进程就启动了,直到系统关机。当然如果认为的强制干预的话,也是能关闭它的。守护进程会按照周期性去执行某个任务或着等待处理将会发生的某个任务。比如httpd、mysqld之类的,就是守护进程。

    Nginx + php-fpm:

    php-fpm 是动态解析服务器,Nginx 作为 http 服务器。
    Nginx 本身来说是不支持解析PHP的,终端对PHP的页面请求将会被 Nginx 交给FastCGI监听的IP端口,由php-fpm处理,最后将处理结果返还给Nginx。这个过程中,Nginx仅仅是作为反向代理服务器,通过反向代理功能,将动态请求交给后端的php-fpm处理,实现对PHP请求的解析。

    Nginx不支持对外部程序的调用或解析。所有的外部程序(包括PHP)必须有FastCGI接口来调用。FastCGI在linux中是一个socket(ip socket 或 文件 socket),调用CGI还需要FastCGI的wrapper(可以理解成一个程序,用来启动其他程序),这个wrapper绑定在某个固定的socket上。当Nginx将CGI请求发给socket时,通过FastCGI接口,wrapper就收到请求,然后wrapper会fork(派生)出一个新的线程,用来调用外部程序解释器或脚本来处理请求,并读取返回数据,然后wrapper将返回的数据通过FastCGI接口,通过固定的socket,将数据返回给Nginx,返回给客户端。

    Nginx相关配置:
    vim nginx.conf

    Nginx 接收到请求时,回去配置文件找到对应的server,然后匹配server中所有的location,找到最匹配的,而location中的命令会去启动不同的模块去完成工作,以下是关于php的配置。

    可以看到以".php"结尾的文件请求,会交给127.0.0.1:9000处理。而这个地址就是fastCGI监听的端口和地址

            location ~ \.php$ {
                root           html;
                fastcgi_pass   127.0.0.1:9000;		
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
            }
    
    

    php相关配置:

    vim php-fpm.conf

    可以看到 FastCGI监听的是127.0.0.1:9000
    在这里插入图片描述
    这得和Nginx所使用的用户一致
    在这里插入图片描述
    这个要取消注释,pid要有
    在这里插入图片描述

    展开全文
  • LNMP架构及应用部署

    2019-09-05 15:21:12
    随着Nginx在企业中的使用越来越多,LNMP (或 LEMP)架构也受到越来越多Linux系统工程师的青睐。 构建LNMP网站平台 就像构建LAMP平台一样,构建LNMP平台也需要Linux服务器. MySQL 数据库、PHP 解析环境,区别主要在...
  • 浅谈LNMP架构

    2019-10-17 18:27:31
    LNMP代表的就是:Linux+Nginx+MySQL+PHP这种网站服务器架构。 • Linux:是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo等。 • Nginx:是一个...
  • 企业级LNMP架构部署及运用

    千次阅读 2020-09-05 15:16:56
    目录一、LNMP架构部署及运用1.1 LNMP架构解读1.2 MySQL安装配置1.3 PHP解析环境的安装-11.4 PHP解析环境的安装-21.5 配置Nginx支持PHP环境1.6 LNMP下部署Discuz二、部署LNMP(1)、安装nginx(2)、LNMP部署(3)、...
  • 文章目录lnmp是什么lnmp架构的优点 lnmp是什么 LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或...
  • 文章目录前言什么是LNMP架构LNMP架构的特点LNMP的优点源代码编译一、 Nginx编译安装过程1.1 准备安装包,放进opt目录中1.2 安装nginx环境依赖包1.3 创建运行用户1.4 编译安装Nginx1.5 路径的优化1.6 检查配置文件,并...
  • LNMP架构介绍及其部署

    万次阅读 2018-10-19 13:00:56
    LNMP架构介绍 LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Mysql是一个小型关系型数据库管理系统。PHP是一种在...
  • LNMP架构介绍

    千次阅读 2018-01-07 11:48:09
    LNMP架构 LLNMP和·LAMP唯一不同·的是指提供web服务的是Nginx, 在Apache中,PHP是作为一个模块存在的。而在Nginx中,PHP是作为一个独立服务存在的,这个服务叫做php-fpm。 Nginx直接处理静态请求,动态请求...
  • LNMP架构及应用部署 1、部署Nginx 软件 2、安装Mysql数据库(源码安装) 3、安装PHP解析环境 4、配置Nginx支持PHP环境 5、LNMP平台中部署WEB应用 LNMP也称为LEMP,E来自于Nginx的发音[engine x] LNMP就像构建LAMP...
  • web服务之LAMP&LNMP架构

    2020-06-09 09:50:23
    CGI介绍,LAMP安装,LNMP编译安装。
  • LNMP架构部署

    2021-10-26 14:51:02
    LNMP架构部署 简介 LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Mysql是一个小型关系型数据库管理系统。PHP是一...
  • 基于K8S的LNMP架构(HPA) LNMP LNMP架构是常见的Web全栈架构,目前许多网站都使用了该种方法进行开发。对于常见的传统架构,服务器可靠性不是很高,Nginx、PHP或者MySQL任意一个中间件发生故障都可能导致生产环境...
  • 什么是LNMP架构 LNMP平台就是Linux、Ngnix、 MySQL、 PHP的组合架构,需要Linux服务器、MySQL数据库、PHP解析环境 MySQL安装配置 为了与Nginx、PHP环境保持一致,此处选择采用源代码编译的方式安装MySQL组件 MySQL...
  • Linux云计算架构-部署LNMP架构

    千次阅读 2020-06-21 18:10:41
    Linux云计算架构-部署LNMP架构 1. 什么是LNMP架构 LNMP=Linux + Nginx + MySQL + PHP Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个 BSD-like 协议下发行。其特点是...
  • 目录工作原理架构介绍LAMP架构介绍LNMP架构介绍LAMP LNMP差别 工作原理 LAMP 浏览器向服务器发送http请求,服务器 (Apache) 接受请求,由于php作为Apache的组件模块也会一起启动,它们具有相同的生命周期。Apache会...
  • LNMP架构简介

    2020-03-24 21:03:19
    和LAMP不同的是LNMP中的N指的是Nginx(类似于Apache的一种web服务软件)其他都一样。目前这种环境应用的也是非常之多。Nginx设计的初衷是提供一种快速高效多并发的web服务软件。在静态页面的处理上Nginx的确胜Apache...
  • 鉴于一个局域网对外访问时都是共用同一个公网IP的,因此UV值一般要略大于独立ip值可以通过爱站网来查询这些参数值如果一个网站的uv,pv,独立ip变大,则会导致高的并发,这时要对网站分层布局架构,采用负载均衡。...
  • 文章目录1 什么是lnmp2 用户请求流程 1 什么是lnmp 以前叫做lamp,因为那时候用的apache现在用的是nginx。 lump=Linux Nginx Mysql Php LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写 ...
  • 配置lnmp架构

    2021-06-07 18:05:42
    LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP 工作流程: client用户请求 --> 通过cdn、4lb负载均衡等 -->...
  • LNMP架构介绍及原理流程

    千次阅读 2018-07-13 00:57:10
    LAMP==Linux+Apache+Mysql+PHPLNMP==Linux+Nginx+Mysql+PHP以上两个架构是目前网站的主流架构LNMP的工作原理LNMP是指LNMP==Linux+Nginx+Mysql+PHP的结构体系。其工作原理如下:首先,浏览器发送http request请求到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,885
精华内容 5,954
关键字:

lnmp架构