一、LNMP简介
Linux+Nginx+Mysql+PHP组成的网站架构,常用于中小型网站服务。
二、环境
Debian 6.1.27-1kali1 (2023-05-12)
Nginx/1.22.1
10.11.2-MariaDB(mysql)
PHP 8.2.7
(Debian 6.1.27包含以上包,直接使用即可)
三、Nginx使用
1、服务开启
systemctl start nginx
浏览器输入主机ip直接访问默认页面
2、配置文件
Nginx配置文件在/etc/nginx/目录下,nginx_conf下有events 、http、mail数据块,mail一般不用所以注销掉了
这里讲下主进程号、日志文件和server块配置;
主进程号=> pid /run/nginx.pid
日志文件就access.log(服务日志),error.log(错误日志),在/var/log/nginx目录下
server块主要作用于虚拟主机配置,http块内没有server块 ,在/etc/nginx/sites-enabled/default文件里配置
含监听端口,默认页面配置
root /var/www/html 可以自定义,主页面index.html也可自定义
这里自定义如下:
root /var/www/html/shiyan
mkdir /var/www/html/shiyan
cd /var/www/html/shiyan
vi index.html
重新访问发现页面发生变化(配置修改,服务需要重启)
四、php使用
1、安装php-fpm
安装的Debian自带php8.2,但是查询没有安装php-fpm,所以自行安装。
apt-cache search php*8.2 | grep fpm --查询需安装的包名称
apt-get install php8.2-fpm
启动php-fpm服务
systemctl start php8.2-fpm
2、配置nginx服务server块
vi /etc/nginx/sites-enabled/default
默认注释,去掉注释“#”就行,注意fastcgi_pass参数只能选一种且需与php-fpm配置一致;
fastcgi_pass参数代表nginx与php-fpm进程通信方式:
--不经过网络,只能用于nginx和php-fpm在同一服务器的场景
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
--通过tcp协议,支持跨服务器
fastcgi_pass 127.0.0.1:9000;
php-fpm配置文件
主:/etc/php/8.2/fpm/php8.2-fpm.conf
子: /etc/php/8.2/fpm/pool.d/www.conf
查看php-fpm配置 /etc/php/8.2/fpm/pool.d/www.conf 默认是采用第一种通信方式
两种参数都尝试下
1>fastcgi_pass unix:/run/php/php8.2-fpm.sock;
创建一个简单测试php文件,看能否正常展示
vi /var/www/html/test.php
echo "This is a test!";
重启nginx服务,浏览能输入【ip】/test.php测试
这个时候能看到,php-fpm服务启动没有网络连接,端口开放
2>fastcgi_pass 127.0.0.1:9000;
需要将php-fpm配置文件修改
; listen = /run/php/php8.2-fpm.sock 注释掉
换成tcp通信,与nginx配置文件(sites-enabled/default)fastcgi_pass 保持一致
listen = 127.0.0.1:9000
重启nginx,php8.2-fpm服务,这时查看tcp监听服务有php8.2-fpm
测试的php文件也正常解析并能访问。
注:php-fpm日志文件在/var/log/php8.2-fpm.log,php-fpm启动不起来,可以从日志里看报错信息
五、Mysql
Debian6.1.27-1kali1自带MySQL数据库
systemctl start mysql
mysql -u root -p
自带的默认登陆不需要密码,直接回车
设置密码并将其配置为需要密码认证
alter user 'root'@'localhost' IDENTIFIED BY 'password'; password<=自定义密码
1、创建数据库实例便于测试
CREATE DATABASE test;
user test;
CREATE TABLE `country` (
`id` int(11) NOT NULL,
`name` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
);
insert into country values (1,'beijing'),(2,'shanghai');
CREATE USER 'guest'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON test.* TO 'guest'@'localhost';
FLUSH PRIVILEGES;
EXIT;
2、配置nginx代理
vi /etc/nginx/sites-available/default,添加如下配置
procy_pass为数据库开放端口
3、编写测试php文件
vi index.php
重启nginx服务,浏览器访问,country表数据正常显示
五、总结
LNMP架构简单的搭建测试就完成了,Debian 6.1.27系统都包含这些包确实方便,但相应版本都较为高级,许多书籍以及网上教程都是针对一些旧版本的,配置文件都较为老久,所以好多配置都需要自己去理解去摸索,通过一遍遍的探测才知道每条配置的作用。每次服务启动失败的时候时是非常痛苦的,日志文件和配置文件是必看的,只有通过这两个才知道哪里部署有问题。
六、参考文献
1、《零基础Linux从入门到精通》--零壹快学
2、https://www.cnblogs.com/leon2659/p/9409151.html
3、2019-02-14笔记—php-fpm配置_ai_benwoniu的博客-CSDN博客
4、nginx怎么配置mysql数据库_mob649e8167c4a3的技术博客_51CTO博客
5、解决Mariadb无密码也可以登录的问题_mariadb无密码登录_AmandaTai的博客-CSDN博客