搭建基于FastCGI协议的LNMP

搭建基于FastCGI协议的LNMP

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:

介绍

什么是 LNMP

LNMP 是一套服务的组合而成的一种架构形式, L = Linux、N = Nginx、 M ~= MySQL、 P ~= PHP。

LNMP架构是如何工作的

首先 Nginx 服务默认是不能处理动态请求的,那么当用户发起动态请求时,Nginx 又是如何进行处理的?

首先,浏览器发送 HTTP 请求到服务器(Nginx)。
如果请求的是一些静态资源(CSS,图片,视频等),那么就直接将对应静态资源返回给浏览器。
如果请求的是动态资源(如 .php),那么 Nginx 将把请求信息通过 FastCGI 协议转发给 PHP-FPM(基于 FastCGI 协议的 PHP 解释器管理程序)的工作进程(可有多个工作进程,用于并发执行),PHP-FPM 工作进程 将会调用 PHP 解析器进程根据请求信息找到对应的 PHP 文件并解析执行,然后将执行后的结果返回到 PHP-FPM,PHP-FPM 再通过 FastCGI 协议将脚本处理结果返回给 Nginx,最后 Nginx 服务器再通过 HTTP 协议将结果响应给客户端。

具体如下图所示。

image.png

开始搭建

我这里使用的 Linux 系统版本为 CentOS 7.5,并且我这里的环境是基于此模板机

1、安装 Nginx:

$ yum install nginx -y

这一步推荐使用 Nginx 官网源进行安装,点击直达,测试就无所谓了。

2、配置用户:

$ groupadd -g666 www && useradd -u666 -g666 -s /sbin/nologin -M www

3、修改 Nginx 的傀儡用户为 www

$ sed -i 's/^user nginx/user www/' /etc/nginx/nginx.conf

4、安装 epel 及 PHP7 源:

$ rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
$ rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

5、安装 PHP7 相关包:

$ yum -y install php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-gd php72w-mcrypt php72w-mbstring php72w-pdo php72w-xml php72w-fpm php72w-mysqlnd php72w-opcache

6、修改 php-fpm 服务的傀儡用户为 www

$ sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf 
$ sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf

7、配置 Nginx 虚拟主机与 php-fpm 服务交互:

$ vim /etc/nginx/conf.d/php.conf    
server {
    listen 80;
    server_name php.zze.xyz;
    root /code;
    location / {
        index index.php;
    }

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

8、创建代码存放目录并编写测试 PHP 文件:

$ mkdir /code
$ vim /code/index.php
<?php
    phpinfo();
?>

9、修改 php 和 Nginx 上传文件大小限制:

$ vim /etc/nginx/conf.d/php.conf 
client_max_body_size 100m;
$ vim /etc/php.ini
upload_max_filesize = 200M
post_max_size = 200M

10、启动 Nginx 和 php-fpm 服务并设定开机自启:

$ systemctl start nginx && systemctl enable nginx
$ systemctl start php-fpm && systemctl enable php-fpm

11、在宿主机配置 hosts 映射:

12.0.1.7	php.zze.xyz

12、浏览器测试访问:
image.png

13、安装 mariadb 并设置密码,然后测试登录:

$ yum -y install mariadb mariadb-server
$ systemctl start mariadb && systemctl enable mariadb
$ mysqladmin password zze.xyz
$ mysql -uroot -pzze.xyz
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 5.5.64-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)]> quit
Bye

14、测试 PHP 连接 MySQL,修改测试 PHP 页面如下:

$ vim /code/index.php
<?php
// 如果安装的 mysql 驱动包是 php72w-mysqlnd, 那么就使用 mysqli_connect 函数
// 如果安装的 mysql 驱动包是 php72w-mysql, 那么就使用 mysql_connect 函数
$conn = mysqli_connect("127.0.0.1","root","zze.xyz");
echo $conn ? '连接成功' : '连接失败';
?>

15、浏览器刷新页面:
image.png

至此,LNMP 搭建完成。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/lnmp-fastcgi.html

Buy me a cup of coffee ☕.