一.什么是LNMP
LNMP是一套技术的组合,L=linux,N=nginx,M=mysql,P=php
首先Nginx服务是不能处理动态资源请求,那么当用户发起动态请求时, Nginx又是如何进行处理的?
-
nginx仅支持解析html文件;图片传输;视频传输;不支持 php、python、java等脚本文件,因此php,python都是nginx通过fastcgi,uwcgi协议来转发的,java这是通过tomcat
-
当用户发起http请求,请求会被Nginx处理。
-
如果是静态资源请求Nginx则直接返回,
-
如果是动态请求Nginx则通过fastcgi协议转交给后端的PHP程序处理
-
如果这个动态请求要读取数据库,那么php就会继续向后请求mysql数据库读取需要的数据
Nginx与Fast-cgi详细工作流程
二.LNMP环境搭建
1.Nginx的搭建
# 安装Nginx
[root@tdm ~]# yum -y install nginx
# 开机自启
[root@tdm ~]# systemctl start nginx
[root@tdm ~]# systemctl enable nginx
2.安装php
# 检查是否安装过,有的话卸载
[root@tdm ~]# rpm -qa|grep php
# 配置php yum源
[root@tdm /etc/yum.repos.d]# vim /etc/yum.repos.d/php.repo
[php-webtatic]
name = PHP Repository
baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/
gpgcheck = 0
# 生成缓存
yum repolist
#安装php
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
#修改php配置,统一使用nginx用户,与nginx用户一致
# 启动php-fpm
systemctl start php-fpm
systemctl enable php-fpm
# 检查进程和端口
ps -ef | grep '[p]hp-fpm'
netstat -lntup |grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 7818/php-fpm: maste
3.安装数据库
# 安装mariadb
yum install -y mariadb-server
# 启动并加入开机自启
systemctl start mariadb
systemctl enable mariadb
# 检查MySQL端口和进程
[root@tdm ~]# netstat -lntup | grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 8143/mysqld
ps -ef | grep '[m]ysqld'
# 设置Mariadb密码123456
[root@web01 ~]# mysqladmin -uroot password '123456'
4.测试Nginx与PHP的连接
# php.conf文件配置
server {
listen 80;
server_name 182.92.243.89;
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;
}
}
# 创建站点目录
[root@tdm code]# mkdir php
[root@tdm php]# vim info.php
<?php
phpinfo();
?>
5.测试PHP连接数据库
# 在/code/php目录下创建mysql.php文件,填入对应的数据库IP、用户名、密码
vim /code/php/mysql.php
<?php
$servername = "localhost"; # //修改相应配置。如果不是本机,则需修改相应数据库用户权限,否则无法访问
$username = "root";
$password = "123";
// 创建连接
$conn = mysqli_connect($servername, $username, $password);
// 检测连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "php可以连接MySQL";
?>
参考:https://zhuanlan.zhihu.com/p/644362162