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}
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;
?>
步骤三:编写脚本,连接数据库
创建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>");
}
?>
测试:
验证是否连接成功
进入数据库
mysql -uroot
grant all on *.* to 'tom'@'localhost' identified by '123';
刷新mysql.php网页,看是否添加成功
添加成功,说明数据库连接成功
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服务
解决方案
/usr/local/nginx/sbin/nginx
未启动php-fpm
tailf /usr/local/nginx/logs/error.log #动态查看错误日志
(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
无法连接数据库(这句话在我们的脚本中写过,连接失败输出这句话)
解决方案
systemctl start mariadb.service
未安装php-mysqlnd
查看日志
用户----->nginx-------->php----->mysql
能进入网页,说明我们的前几步都没有错误,nginx正常转发,我们查看php的错误日志
tail -f /var/log/php-fpm/www-error.log
在脚本中的第二行出错,脚本第二行,连接数据库
解决方案
rpm -q php-mysqlnd #如果没有安连接数据库装请安装
yum -y install php-mysqlnd
脚本错误
查看日志
tail -f /var/log/php-fpm/www-error.log
在这个脚本第三行语法错误
解决方案:
修改脚本错误