1.安装部署Nginx、MariaDB、php环境
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服务端配置,实现以下目标
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结合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网页,看是否添加成功
添加成功,说明数据库连接成功
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
在这个脚本第三行语法错误
解决方案:
修改脚本错误