• LNMP配置(Linux、Nginx、MySQL、PHP)


    1、LNMP应用环境

    随着 Nginx Web 服务的逐渐流行,慢慢的岀现了新的 Web 服务环境组合—LNMP & LEMP,其中 LNMP为 Linux、Nginx、MySQL、PHP 等首字母的缩写。如今,LNMP 已经逐渐成为国内大中型互联网公司网站的主流组合环境。

    2、LNMP组合工作流程

    当 LNMP 组合工作时,首先用户会通过在浏览器中输人域名请求 Nginx Web 服务,如果请求的是静态资源,则由 Nginx 解析返回给用户; 如果请求的是动态资源( .php 结尾 ),那么Nginx 就会把它通过 FastCGI 接口( 生产常用方法)发送给 PHP 引擎服务( FastCGI 进程php-fpm ) 进行解析,如果这个动态请求要读取数据库数据,那么 PHP 就会继续向后请求 MySQL 数据库,以读取需要的数据,并最终通过 Nginx 服务把获取的数据返回给用户。

    3、FastCGI介绍

    1)什么是 CGI

    CGI 的全称为 “通用网关接口”( Common Gateway Interface ),为 HTTP 服务器与其他机器上的程序服务通信交流的一种工具,CGI 程序须运行在网络服务器上。传统 CGI 接口方式的主要缺点是性能较差,因为每次 HTTP 服务器遇到动态程序时都需要重新启动解析器来执行解析,之后结果才会被返回给 HTTP 服务器。这在处理高并发访问时几乎是不可用的,因此就诞生了 FastCGI。另外传统的 CGI 接口方式安全性也很差,故而现在已经很少被使用了。

    2)什么是 FastCGI

    FastCGI 是一个可伸缩地、 高速地在 HTTP 服务器和动态脚本语言间通信的接口(在 Linux 下,FastCGI 接口即为 socket,这个 socket 可以是文件 socket,也可以是 IP socket)主要优点是把动态语言和 HTTP 服务器分离开来。多数流行的 HTTP 服务器都支持 FastCGI,包括 Apache、Nginx 以及 Lighttpd等等。同时,FastCGI 也被许多脚本语言所支持,例如当前比较流行的脚本语言 PHP。FastCGI 接口采用的是
    C/S 架构,它可以将 HTTP 服务器和脚本解析服务器分开,同时还能在脚本解析服务器上启动一个或多个脚本来解析守护进程。当 HTTP 服务器遇到动态程序时,可以将其直接交付给 FastCGI 进程来执行,然后将得到的结果返回给浏览器。这种方式可以让 HTTP 服务器专一地处理静态请求,或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

    3)FastCGI 的重要特点

    HTTP 服务器和动态脚本语言间通信的接口或工具。可把动态语言解析和 HTTP 服务器分离开。Nginx、Apache 、Lighttpd,以及多数动态语言都支持 FastCGI。FastCGI 接口方式采用 C/S 结构, 分为客户端( HTTP 服务器)和服务器端( 动态语言解析服务器)。PHP 动态语言服务器端可以启动多个 FastCGI 的守护进程,例如 php-fpm(fcgi processmangement)。HTTP 服务器通过例如 Nginx fastcgi_pass FastCGI 客户端和动态语言 FastCGI 服务器端通信,例如 php-fpm。

    4)Nginx FastCGI 的运行原理

    Nginx 不支持对外部动态程序的直接调用或者解析,所有的外部程序(包括 PHP)必须通过 FastCGI 接口来调用。FastCGI 接口在 Linux 下是 socket,为了调用 CGI 程序,还需要一个 FastCGI 的 wrapper(可以理解为用于启动另一个程序的程序),这个 wrapper绑定在某个固定的 socket 上,如端口或文件socket。当 Nginx 将 CGI 请求发送给这个 socket 的时候,通过 FastCGI 接口,wrapper 接收到请求,然后派生岀一个新的线程,这个线程调用解释器或外部程序处理脚本来读取返回的数据;接着,wrapper 再将返回的数据通过 FastCGI 接口,沿着固定的 socket 传递给 Nginx;最后,Nginx 将返回的数据发送给客户端,这就是 Nginx+FastCGI 的整个运作过程。FastCGI 的主要优点是把动态语言和 HTTP 服务器分离开来,使 Nginx 专门处理静态请求及向后转发的动态请求,而 PHP/PHP-FPM 服务器则专门解析 PHP 动态请求。

    4、配置LNMP

    1)部署LNMP环境

    ① 安装国内的epel(阿里)

    [root@138 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
    • 1

    ② 安装LNMP环境所需包

    [root@138 ~]# yum install nginx mariadb-server php php-mysql php-gd php-fpm -y
    
    • 1

    2)配置LNMP环境

    ① 数据库

    [root@138 ~]# systemctl enable mariadb --now
    [root@138 ~]# mysqladmin -uroot password '123456'
    
    • 1
    • 2

    ② php-fpm

    [root@138 ~]# vim /etc/nginx/nginx.conf
    server {
    	listen       80;
    	listen       [::]:80;
    	server_name  localhost;
    	root         /usr/share/nginx/html;
    	index        index.php index.html index.htm;
    
    	# Load configuration files for the default server block.
    	include /etc/nginx/default.d/\*.conf;
    	
    	location ~ \.php$ {
    		root /usr/share/nginx/html;
    		fastcgi_pass 127.0.0.1:9000;
    		fastcgi_index index.php;
    		#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
    		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    		include fastcgi_params;
    	}
    
    #以上内容根据实际情况对照修改
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    ③ php

    [root@138 ~]# vim /etc/php.ini 
    cgi.fix_pathinfo=0
    date.timezone ="Asia/shanghai"
    
    • 1
    • 2
    • 3

    3)启动服务

    [root@138 ~]# systemctl start nginx mariadb php-fpm
    
    • 1

    4)测试协同

    ① 测试nginx和php协同

    [root@138 ~]# echo "<?php phpinfo(); ?>" > /usr/share/nginx/html/phpinfo.php
    
    • 1

    在这里插入图片描述

    ② 测试mysql和php协同

    [root@138 ~]# vim /usr/share/nginx/html/mysql.php
    <?php
    $con = mysql_connect("localhost","root","123456");
    if (!$con) {
    	die("could not connect to the db:\n" . mysql_error());
    } 
    else { echo "success"; }
    mysql_close($con);
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    ③ 删除测试的php文件(极其重要)【涉及安全问题】

    [root@138 ~]# rm -rf /usr/share/nginx/html/*.php
    
    • 1

    5)部署应用

    ① 在wordpress官网下载对应版本

    wordpress下载链接:https://cn.wordpress.org/download/releases/

    [root@138 html]# pwd
    /usr/share/nginx/html
    
    [root@138 html]# wget -c https://cn.wordpress.org/wordpress-4.3.1-zh_CN.tar.gz
    
    [root@138 html]# ll wordpress-4.3.1-zh_CN.tar.gz 
    -rw-r--r-- 1 root root 6922520 Jun 28 11:26 wordpress-4.3.1-zh_CN.tar.gz
    
    [root@138 html]# tar xf wordpress-4.3.1-zh_CN.tar.gz
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ② 为wordpress创建对应数据库和用户

    [root@138 html]# mysql -uroot -p123456 -e "create database wordpress character set utf8;"
    [root@138 html]# mysql -uroot -p123456 -e "grant all on wordpress.* to wordpress@localhost identified by '123456';"
    
    • 1
    • 2

    ③ 部署网站

    URL:192.168.25.138/wordpress/
    在这里插入图片描述
    填写对应数据库和用户即可提交进行下一步
    在这里插入图片描述
    根据步骤进行即可(显示没有权限)
    在这里插入图片描述

    [root@138 wordpress]# pwd
    /usr/share/nginx/html/wordpress
    [root@138 wordpress]# vim wp-config.php			#将内容复制进来
    <?php
    /**
     * WordPress基础配置文件。
     *
     * 这个文件被安装程序用于自动生成wp-config.php配置文件,
     * 您可以不使用网站,您需要手动复制这个文件,
     * 并重命名为“wp-config.php”,然后填入相关信息。
     *
     * 本文件包含以下配置选项:
     *
     * * MySQL设置
     * * 密钥
     * * 数据库表名前缀
     * * ABSPATH
     *
     * @link https://codex.wordpress.org/zh-cn:%E7%BC%96%E8%BE%91_wp-config.php
     *
     * @package WordPress
     */
    
    // ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
    /** WordPress数据库的名称 */
    define('DB_NAME', 'wordpress');
    
    /** MySQL数据库用户名 */
    define('DB_USER', 'wordpress');
    
    /** MySQL数据库密码 */
    define('DB_PASSWORD', '123456');
    
    /** MySQL主机 */
    define('DB_HOST', 'localhost');
    
    /** 创建数据表时默认的文字编码 */
    define('DB_CHARSET', 'utf8mb4');
    
    /** 数据库整理类型。如不确定请勿更改 */
    define('DB_COLLATE', '');
    
    /**#@+
     * 身份认证密钥与盐。
     *
     * 修改为任意独一无二的字串!
     * 或者直接访问{@link https://api.wordpress.org/secret-key/1.1/salt/
     * WordPress.org密钥生成服务}
     * 任何修改都会导致所有cookies失效,所有用户将必须重新登录。
     *
     * @since 2.6.0
     */
    define('AUTH_KEY',         'L.3iqJK[~o/u..Y.v|HU:VzFyC-/u;>$]bg9mhi&=ex2wLVIWh8W6?DFoa~^DAC-');
    define('SECURE_AUTH_KEY',  '|sy1paQb[rifwRP`VfH<USr=;n].PxJ^-]VJWc/^+X0`J|UZ$x*#A+5vdo!,Z@}>');
    define('LOGGED_IN_KEY',    '~K{@4d?fDilj*qX)Sdg_oRAUm4F#Zu!EnEjq`gq w<niI 2}TsA5!{K}JLf=O&z]');
    define('NONCE_KEY',        '@F>h{|O,$_g!(@|ev3pcEEO)#8kHkl+~ym!LVZ>}^HYEGv$;^QT^}L7*|KGrN?V{');
    define('AUTH_SALT',        'QZjH.k`GU#LJ+M}.(BTg3Wbgni;h$LU+H[kk|*zKFo7N<6:#|;xU+F(X:q y3cd2');
    define('SECURE_AUTH_SALT', 'r&{UX2!68 $1{c@cR|^lE+V@)&K+U>Aw)(O?[Nh VrS]a3|34e<1^i9>agI<9M|5');
    define('LOGGED_IN_SALT',   '5HJ|TFb4),SMrH6HgtD:uEO.3>[mIR[mZeD/^:wl5x4:}q5!bo2^vug:e8tI25MZ');
    define('NONCE_SALT',       'j7^_Q[(<IFd6L%#po+UI+-Ymy+=u4rGN}iA;` 7GaL6-d+2]x|FjF4wh7yU{g`-_');
    
    /**#@-*/
    
    /**
     * WordPress数据表前缀。
     *
     * 如果您有在同一数据库内安装多个WordPress的需求,请为每个WordPress设置
     * 不同的数据表前缀。前缀名只能为数字、字母加下划线。
     */
    $table_prefix  = 'wp_';
    
    /**
     * 开发者专用:WordPress调试模式。
     *
     * 将这个值改为true,WordPress将显示所有用于开发的提示。
     * 强烈建议插件开发者在开发环境中启用WP_DEBUG。
     *
     * 要获取其他能用于调试的信息,请访问Codex。
     *
     * @link https://codex.wordpress.org/Debugging_in_WordPress
     */
    define('WP_DEBUG', false);
    
    /**
     * zh_CN本地化设置:启用ICP备案号显示
     *
     * 可在设置→常规中修改。
     * 如需禁用,请移除或注释掉本行。
     */
    define('WP_ZH_CN_ICP_NUM', true);
    
    /* 好了!请不要再继续编辑。请保存本文件。使用愉快! */
    
    /** WordPress目录的绝对路径。 */
    if ( !defined('ABSPATH') )
    	define('ABSPATH', dirname(__FILE__) . '/');
    
    /** 设置WordPress变量和包含文件。 */
    require_once(ABSPATH . 'wp-settings.php');
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100

    点击进行安装进入下一步(按照需求填写即可)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    看到此界面表示已完成

  • 相关阅读:
    一款类似宜搭、轻流的低代码核心功能:jvs-flow(流程引擎)
    基于C#实现KMP算法
    Hadoop 3.x 笔记(配置、命令、脚本、重要图示、代码实现)
    如何将数据库从 CloudKit 迁移到 Firebase
    sylar高性能服务器-日志(P43-P48)内容记录
    Redis 要被淘汰了?
    Oracle存储过程干货(五):存储过程中怎么存多个列的值
    【c语言】详解文件操作(二)
    初识Spring Data JPA
    使用telegram机器人发送通知
  • 原文地址:https://blog.csdn.net/JohnnyG2000/article/details/125354782