Java教程

LNMP的部署

本文主要是介绍LNMP的部署,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

LNMP的部署

部署环境

1.安装部署Nginx、MariaDB、php环境

  • 安装部署Nginx、mariadb、php、php-fpm
  • 启动Nginx、mariadb、fpm服务
  • 并测试LNMP 是否工作正常

2.LNMP(Linux、Nginx、mariadb、PHP)

在Redhat系统中,源码安装Nginx,使用rpm包安装Mariadb、PHP-fpm软件

操作过程中需要安装的软件列表如下:

nginx

mariadb、mariadb-server、mariadb-devel

php、php-fpm、php-mysql

备注:mariadb(数据库客户端软件)、mariadb-devel(其他客户端软件的医赖包),mariadb-server(数据库服务器软件)、php(解释器)、php-fpm(进程管理器服务)、php-mysql(PHP的数据库扩展包)

本次实验使用环境

Redhat 8.3

nginx 1.20.1

mariadb 3:10.3.17

php 7.2.24-1

步骤一(安装服务):

1.使用yum安装基础依赖包

yum -y install gcc pcre-devel openssl-devel

2.源码安装nginx(如果已经安装请忽略这一步)

useradd -s /sbin/nologin nginx  #创建的用户不允许登录
上传相应的软件包到服务器上,并进行解压安装
tar -xf nginx-1.18.0.tar.gz 
cd nginx-1.18.0/
./configure \
 --prefix=/usr/local/nginx \  #指定安装路径,这个路径也是源码安装的默认路径
 --user=nginx \               #指定用户,防止其他人恶意攻击
 --group=nginx \            #指定组
 --with-http_ssl_module       #开启ssl加密功能  --with-模块名称
 make && make install

3.安装mariadb数据库

yum -y install  mariadb mariadb-server mariadb-devel

4.安装php

yum -y install php php-fpm php-mysqlnd #在redhat7中php-mysqlnd的包名为php-mysql

步骤二(启动服务):

1.启动nginx服务(如果已经启动nginx,请忽略)

这里需要注意的是,如果服务器上已经启动了其他监听80端口的服务软件(如httpd),则需要先关闭该服务,否则会出现冲突

systemctl stop httpd   #如果安装了httpd请关闭
/usr/local/nginx/sbin/nginx         #启动nginx服务
netstat -utnlp | grep :80   #查看80端口的状态

2.启动Mariadb服务

systemctl start mariadb
systemctl status mariadb
systemctl enable mariadb   

3.启动PHP-fpm服务

systemctl start php-fpm
systemctl status php-fpm
systemctl enable php-fpm

4.调整nginx服务端配置,实现以下目标

  • 配置Fast-cgi支持PHP网页
  • 创建php测试页面,测试使用php连接数据库的效果

location匹配用户的地址栏(支持正则),从/开始匹配(从com后面的第一个/匹配),类似于if,then

例:http://www.a.com/abc

location /abc { deny all; } 如果匹配到abc 不允许

location /aaa { allow 1.1.1.1; } 匹配到aaa ,允许1.1.1.1

location /abb { allow all ;} 匹配到abb 允许所有

location / { } 优先级最低,匹配所有

插入一个小知识

Nginx动静分离

nginx结合FastCGI技术即可支持php页面架构,如下图所示

  • 用户访问nginx

  • 如哦用户访问的是静态数据,则到html目录找,直接返回

  • 如果用户访问的是动态脚本,到html目录找,转发给fpm(9000端口)

  • fpm是个多进程软件

  • location 静态 {allow all }

  • location 动态 {转发给FPM}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dCCni51g-1630683858372)(E:/Typort/image-20210827114333908.png)]

1.查看php-fpm配置文件(需要添加一行监听端口的配置)

vim /etc/php-fpm.d/www.conf | grep -v "^;"  | grep -v "^$"
[www]
user = apache
group = apache
listen = /run/php-fpm/www.sock
listen =127.0.0.1:9000     #这一行为添加的行
listen.acl_users = apache,nginx
listen.allowed_clients = 127.0.0.1:9000    #php端口号
pm = dynamic
pm.max_children = 50     #最大进程数
pm.start_servers = 5                 #最小进程数
pm.min_spare_servers = 5             #最少需要几个空闲进程
pm.max_spare_servers = 35            #最多允许几个进程处于空闲

继续实验

5.修改nginx配置文件并启动服务

vim /usr/local/nginx/conf/nginx.conf
....
server {
        listen       80;       #端口
        server_name  www.b.com;           #域名

        location / {
            root   www;     #指定网站根路径
            index  index.html index.htm;
}
location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;  #将请求转发到本机9000,php解释器
            fastcgi_index  index.php;
            include        fastcgi.conf; #fastcgi.conf 存放了php的变量,
        }
}

....
重新加载配置文件确保刚才的配置生效
/usr/local/nginx/sbin/nginx -s reload

6.创建php页面,测试LNMP架构能否解析php页面

vim /usr/local/nginx/html/test.php
<?php
$i=33;
echo $i;
?>

### [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FK7dXvxl-1630683858375)(E:/Typort/image-20210827181134259.png)]

步骤三:编写脚本,连接数据库

创建php测试页面,连接并查询mariadb

php连接数据库

vim /usr/local/nginx/html/mysql.php
<?php
$mysqli = new mysqli('localhost','root','','mysql');#连接本地的数据库,root,空密码,默认进入mysql数据库
if (mysqli_connect_errno()){    #如果连接失败,屏幕显示Unanle to connect
        die('Unable to connect!').  mysqli_connect_error();
}       
$sql = "select * from user";
$result = $mysqli->query($sql);
while( $row = $result->fetch_array()){
        print("Host:%s",$row[0]);
        print("</br>");
}       
?>

测试:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tRuViDii-1630683858376)(E:/Typort/image-20210827191410793.png)]

验证是否连接成功

进入数据库
mysql -uroot
grant all on *.* to 'tom'@'localhost' identified by '123';

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0xbjXTva-1630683858379)(E:/Typort/image-20210827191714394.png)]

刷新mysql.php网页,看是否添加成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-94psAlpG-1630683858381)(E:/Typort/image-20210827191821821.png)]

添加成功,说明数据库连接成功

LNMP中常见的问题

Nginx的默认访问日志文件为/usr/local/nginx/logs/access.log

Nginx的默认错误日志文件为/usr/local/nginx/logs/error.log

PHP默认错误日志文件为/var/log/php-fpm/www-error.log

如果动态网站访问失败,查找错误信息

下面列出常见的几种错误

1.没有启动服务

未打开nginx服务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MNHxtzTs-1630683858382)(E:/Typort/image-20210830110501555.png)]

解决方案

/usr/local/nginx/sbin/nginx   

未启动php-fpm

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cZfwGPm4-1630683858383)(E:/Typort/image-20210830110646496.png)]

tailf   /usr/local/nginx/logs/error.log   #动态查看错误日志

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f8UCVrNj-1630683858385)(E:/Typort/image-20210830111232378.png)]

(connection refused)连接被拒绝,9000端口被拒绝

解决方案

systemctl start php-fpm
还有一种可能是没有修改配置文件,在配置文件中加入监听9000端口,重启服务
vim /etc/php-fpm.d/www.conf
...
listen =127.0.0.1:9000
...
systemctl restart php-fpm

未启动Mariadb

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aLczr0yp-1630683858386)(E:/Typort/image-20210830111521693.png)]

无法连接数据库(这句话在我们的脚本中写过,连接失败输出这句话)

解决方案

systemctl start mariadb.service

未安装php-mysqlnd

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YyKnY8v8-1630683858387)(E:/Typort/image-20210830111922893.png)]

查看日志

用户----->nginx-------->php----->mysql

能进入网页,说明我们的前几步都没有错误,nginx正常转发,我们查看php的错误日志

tail -f /var/log/php-fpm/www-error.log 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-clhnbWfz-1630683858388)(E:/Typort/image-20210830112604003.png)]

在脚本中的第二行出错,脚本第二行,连接数据库

解决方案

rpm -q php-mysqlnd #如果没有安连接数据库装请安装
yum -y install php-mysqlnd

脚本错误

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D02Kj8vM-1630683858389)(E:/Typort/image-20210830112815685.png)]

查看日志

tail -f /var/log/php-fpm/www-error.log 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iGZVtBWB-1630683858390)(E:/Typort/image-20210830113329645.png)]

在这个脚本第三行语法错误
解决方案:
修改脚本错误

这篇关于LNMP的部署的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!