LNMP的部署
部署环境
2.LNMP(Linux、Nginx、mariadb、PHP)
在Redhat系统中,源码安装Nginx,使用rpm包安装Mariadb、PHP-fpm软件
操作过程中需要安装的软件列表如下:
mariadb、mariadb-server、mariadb-devel
备注: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
步骤二(启动服务):
这里需要注意的是,如果服务器上已经启动了其他监听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服务端配置,实现以下目标
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页面架构,如下图所示
-
如哦用户访问的是静态数据,则到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 #最多允许几个进程处于空闲
继续实验
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
vim /usr/local/Nginx/html/test.PHP
<?PHP
$i=33;
echo $i;
?>
步骤三:编写脚本,连接数据库
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';
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
查看日志
用户----->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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。