1、LNMP架构概述
lnmp就是Linux+Nginx+Mysql+PHP,Linux作为服务器的操作系统,Nginx作为web服务器、PHP作为解析动态脚本语言、Mysql即为数据库
Nginx服务本身不能处理PHP的请求,那么当用户发起php动态请求,Nginx又是如何处理的。
有两种方法:
1、将PHP页面解析请求发给Apache处理
2、将PHP页面解析请求发给php-fpm模块 ******
用户--->http协议--->Nginx--->fastcgi协议--->php-fpm
注意:fastcgi是nginx连接php-fpm之间协议
Nginx与Fast-CGI详细工作流程图:
1、用户通过http协议发起请求,请求会先抵达LNMP架构中的Nginx
2、Nginx会根据用户的请求进行判断,这个判断是有Location进行完成
3、判断用户请求的是静态页面,Nginx直接处理
4、判断用户请求是动态页面,Nginx会将该请求交给fastcgi协议下发
5、fastcgi会将请求交给php-fpm管理进程,php-fpm管理进程接收到后会调用具体的工作线程wrapper
6、wrapper线程会调用php进行解析,如果只是解析代码php直接返回
7、如果有查询数据库操作,则有php连接数据库(用户,密码,IP)然后发起查询操作
8、最终数据由 mysql--->php---->php-fpm---->fastcgi---->nginx---->http--->user
2、安装LNMP
yum 安装nginx1.18 php7.3 mysql5.6
1、安装最新nginx
vim /etc/yum.repos.d/nginx.repo
[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1
2、执行yum安装
yum install nginx -y
3、启动并加入开机自启
systemctl start nginx #启动nginx服务
systemctl enable nginx #设置开机自启
2、安装mysql5.6
1、下载MySQL官方扩展源
[root@localhost yum.repos.d]# rpm -ivh http://repo.mysql.com/yum/mysql-5.6-community/el/7/x86_64/mysql-community-release-el7-5.noarch.rpm
2、安装mysql5.6,
[root@localhost yum.repos.d]# yum install mysql-community-server -y
3、启动数据库,并加入开机自启动
[root@localhost yum.repos.d]# systemctl start mysqld [root@localhost yum.repos.d]# systemctl enable mysqld
注意:mysql是绝对不需要源码安装,所有功能都是通过修改配置文件实现的。
4、mysql5.7以前的版本,登录都不需要密码
[root@localhost ~]# mysql -uroot
5、为了安全,我们必须给root设置密码,使用密码登录
[root@localhost ~]# mysqladmin -u root password 123456 [root@localhost ~]# mysql -uroot -p123456
3、使用第三方扩展EPEL 源安装php7.3
1、查看之前是否安装了php,先删除php
[root@localhost ~]# php -v
如果有使用yum remove php*
2、安装扩展EPEL 源
[root@localhost yum.repos.d]# yum install epel-release
安装REMI源:
[root@localhost yum.repos.d]# yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
3、安装yum源管理工具
[root@localhost yum.repos.d]# yum install yum-utils
4、安装php7.3版本
[root@localhost yum.repos.d]# yum install -y php73-php-fpm php73-php-cli php73-php-bcmath php73-php-gd php73-php-json php73-php-mbstring php73-php-mcrypt php73-php-mysqlnd php73-php-opcache php73-php-pdo php73-php-pecl-crypto php73-php-pecl-mcrypt php73-php-pecl-geoip php73-php-recode php73-php-snmp php73-php-soap php73-php-xmll
5、设置开机启动、运行服务:
[root@localhost yum.repos.d]# systemctl start php73-php-fpm [root@localhost yum.repos.d]# systemctl enable php73-php-fpm
6、设置php
[root@localhost yum.repos.d]# rpm -qa | grep php
找到 php73-php-fpm-7.3.26-1.el7.remi.x86_64
[root@localhost yum.repos.d]# rpm -ql php73-php-fpm-7.3.26-1.el7.remi.x86_64
查找php.ini位置
[root@localhost yum.repos.d]# find /etc/opt/remi/php73 -name php.ini /etc/opt/remi/php73/php.ini
编辑/etc/opt/remi/php73/php.ini替换换 ;cgi.fix_pathinfo=1 为 cgi.fix_pathinfo=0 :
[root@localhost yum.repos.d]# sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/opt/remi/php73/php.ini
重启php73-php-fpm
systemctl restart php73-php-fpm
7、查看PHP
[root@localhost yum.repos.d]# php73 -v PHP 7.3.26 (cli) (built: Jan 5 2021 10:36:07) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.26, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.3.26, Copyright (c) 1999-2018, by Zend Technologies
4、验证nginx是否可以正常解析php动态请求,以及php程序能否正常连接数据库
1、nginx是否可以正常解析php动态请求
/etc/nginx/conf.d 下,
[root@localhost conf.d]# mv default.conf test.conf
[root@localhost conf.d]# vim test.conf
server { listen 80; server_name localhost; charset utf-8; access_log /home/wwwroot/log/access_test.log main; location / { root /home/wwwroot/gms; index index.php index.html index.htm; } location ~ \.php$ { root /home/wwwroot/gms; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
2、检查语句语法
nginx -t
[root@localhost wwwroot]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost wwwroot]# systemctl reload nginx #重载nginx
3、web 端访问
nginx 可以正常解析php
2、php能否正常连接数据库
1、测试
在/home/wwwroot/gms 下
vim mysqli.php
<?php $servername = "localhost"; $username = "root"; $password = "123456"; //创建连接 $conn = mysqli_connect($servername,$username,$password); //检测连接 if (!$conn){ die("Connection failed:".mysqli_connect_error()); } echo "连接成功"; ?>
外王访问
证实连接成功
至此LNMP架构就以搭建完成
配置:
添加用户www,组www
[root@localhost wwwroot]# groupadd www [root@localhost wwwroot]# useradd -g www -s /sbin/nologin www
更改gms项目的属组
[root@localhost wwwroot]# chown -R www:www gms/ [root@localhost wwwroot]# chmod -R 751 gms/
更改nginx用户为www
[root@localhost wwwroot]# cd /etc/nginx [root@localhost nginx]#vim nginx.comf
修改php-fpm的用户
[root@localhost ]# cd /etc/opt/remi/php73/php-fpm.d [root@localhost php-fpm.d]# ll total 20 -rw-r--r--. 1 www www 19554 Jan 5 20:19 www.conf [root@localhost php-fpm.d]# vim www.conf
重载nginx,php-fpm
[root@localhost php-fpm.d]# systemctl reload php73-php-fpm [root@localhost php-fpm.d]# systemctl reload nginx