介绍
什么是 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 协议将结果响应给客户端。
具体如下图所示。
开始搭建
我这里使用的 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、浏览器测试访问:
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、浏览器刷新页面:
至此,LNMP 搭建完成。
评论区