LNMP

LNMP

0.前言

  Lnmp是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python,其中最具有代表的是

1
Liunx+Nginx+Mysql+php

1.环境查看

  首先确认好我们三个软件的相关版本,并查看是否能够运行该指令

1
2
3
php -v
nginx -v
mysql -v
1

2.Nginx配置

  接下来就是对相关内容进行配置了,打开Nginx的配置文件

1
2
3
location / {
index index.php index.html index.htm;
}

  修改location ~ .php$配置信息

1
2
3
4
5
6
7
8
9
10
11
12
13
#添加下列信息,配置Nginx通过fastcgi方式处理您的PHP请求。
location ~ .php$ {
#将/usr/share/nginx/html替换为您的网站根目录,本文使用/usr/share/nginx/html作为网站根目录。
root /usr/share/nginx/html;
#Nginx通过本机的9000端口将PHP请求转发给PHP-FPM进行处理。
fastcgi_pass 127.0.0.1:9000;
#指定了FastCGI进程应该使用哪个索引文件
fastcgi_index index.php;
#定义了FastCGI进程应该使用哪个脚本文件。具体来说,它将"$document_root"和"$fastcgi_script_name"组合在一起,以生成完整的脚本文件路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#Nginx调用fastcgi接口处理PHP请求。
include fastcgi_params;
}
1

  并将文件移植到share对应的文件夹中

1

  启动Nginx服务

1
sudo systemctl start nginx
1

  好的,又又又出问题了,提示Job for nginx.service failed. See “systemctl status nginx.service” and “journalctl -xe” for details.

1

  使用-t查看我们的配置文件是否有问题,很明显是正确的,接下来执行systemctl status nginx.service查看报错问题:

1

  显示了Failed to start SYSV: NGINX is an HTTP(S) server, HTTP(S) reverse proxy,我怀疑是不是已经开启了进程所以导致无法使用上述的开启服务命令

1

  看起来有一个nginx的主进程子和四个工作进程在运行,尝试先停止错误再重启:

1

  似乎没有头绪,使用journalctl –xe查看报错问题

1

  查看了一下似乎是因为一开始,使用nginx运行服务,但显示Unit nginx.service could not be found.,查询说这是由于nginx没有配置给service 的服务,所以当时是找了相关脚本进行配置,似乎是脚本的问题

1

  根据作者所说是没有问题,查询了大量资料,基本脚本是一模一样的,也就可能是这个脚本的通用问题,接下来有两种反向,一个是解决service的服务脚本问题,另一个是不管这个直接投入到后面的学习中,当然我是那种人吗,干他!

  这个问题,有的人说可能是端口被占用的问题,但是奇怪的是我对80端口进行了处理,依旧是不行,报错显示failed to start SYSV的问题,后来查找后发现这种问题似乎分为了两种方向,之前用的似乎是在yum后无服务的解决办法,因此,修改了脚本方向,选择了另一种处理办法,首先将之前的相关systemctl文件进行删除,查询提示编译安装nginx后需要添加rc.local

1
vim  /usr/lib/systemd/system/nginx.service

  写入systemd unit文件,用于管理nginx服务

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=nginx # 描述该服务为nginx
After=network.target # 在网络服务启动后启动该服务

[Service]
Type=forking # 指定服务类型为forking,即在启动时会派生出子进程
ExecStart=/usr/local/nginx/sbin/nginx # 指定启动命令为/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload # 指定重载命令为/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop # 指定停止命令为/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true # 启用私有临时目录

[Install]
WantedBy=multi-user.target # 指定该服务为multi-user.target的依赖项

  启动配置生效

1
systemctl daemon-reload

  使用systemctl启动nginx了

1
2
systemctl start nginx
systemctl enable nginx
1

  报错了,提示了开始nginx服务失败,与之前的报错不同,这个就比较好处理了,这里由于虚拟机的时间忘记修改过来了,所以显示的还是6月2号的14点,后续会更正,既然是开始失败,第一反应就是端口被占用了,所以使用命令检查相关端口是否在使用中

1
netstat –apn|grep :80
1

  这里其实显示nginx已经在跑服务了,但是就是 不显示service已启动,使用status查看启动状态也是错误的,不管了,先干掉占用80断端口的tcp进程,

1
2
3
4
5
6
sudo fuser -k 80/tcp
sudo fuser -k 8080/tcp

#启动nginx服务
systemctl start nginx
systemctl status nginx
1

  很好,终于解决了,这说明,前面的脚本思路出现了问题,结果查询,在 /usr/lib/systemd/system/nginx.service 中,我定义了一个 Systemd 服务单元,它是一种现代的 Linux 系统服务管理方式。Systemd 是一个用于启动、停止和管理系统服务的工具,它可以自动化许多与服务相关的任务,例如依赖关系管理、进程监控等。

  而之前解决的办法是在 /etc/init.d/nginx 中,定义了一个传统的 SysVinit 脚本,它是一种较早的 Linux 系统服务管理方式。SysVinit 是一种基于脚本的系统服务管理方式,它使用 init 进程来启动和停止服务,并且需要手动编写脚本来管理服务。因此存在一定的不同,这种编译下的启动相关服务启动和状态后续还需要再了解和查看。好了,接下来继续修改Nginx配置文件,添加Nginx对PHP的支持

1
vim /etc/nginx/nginx.conf

  添加或修改location /配置信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
location / {
index index.php index.html index.htm;
}

添加或修改location ~ .php$配置信息。
#添加下列信息,配置Nginx通过fastcgi方式处理您的PHP请求。
location ~ .php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
#Nginx通过本机的9000端口将PHP请求转发给PHP-FPM进行处理。
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
#Nginx调用fastcgi接口处理PHP请求。
}
1
1
2
3
4
#运行以下命令,启动Nginx服务。
sudo systemctl start nginx
#运行以下命令,设置Nginx服务开机自启动。
sudo systemctl enable nginx

  Nginx的修改就到此结束,接下来进行下一个组件的修改

2.Mysql配置

  这里我仅对root用户的登录密码进行了修改,修改为root,这样子方便后面的配置连接

1
2
3
4
5
6
7
8
9
10
11
#使用以下命令启动MySQL服务并跳过权限验证:
sudo mysqld_safe --skip-grant-tables &
#连接到MySQL服务器:
mysql -u root
#在MySQL命令行中执行以下命令来修改root用户的密码(将YOUR_NEW_PASSWORD替换为你想要设置的新密码):
UPDATE mysql.user SET authentication_string=PASSWORD('root') WHERE User='root';
#刷新MySQL权限表:
FLUSH PRIVILEGES;
#退出MySQL命令行:exit;
#重启服务
sudo systemctl restart mysqld

3.PHP配置

  首先新建并编辑phpinfo.php文件,用于展示php的信息:

1
sudo vim /usr/share/nginx/html/phpinfo.php

  输入测试内容:

1
2
3
<?php 
echo phpinfo();
?>

  配置成功后进行插件重启

1
2
3
4
运行以下命令,启动PHP-FPM。
sudo systemctl start php-fpm
运行以下命令,设置PHP-FPM开机自启动。
sudo systemctl enable php-fpm

  在本地Windows主机或其他具有公网访问能力的Windows主机中,打开浏览器。在浏览器的地址栏输入http://192.168.70.151/phpinfo.php进行访问。访问结果如下图所示,这代表了我们的LNMP环境部署成功

4.Lnmp启动!

1

  好的lnmp的搭建和使用就告一段落了


LNMP
https://one-null-pointer.github.io/2023/06/08/Linux运维——LNMP/
Author
liaoyue
Posted on
June 8, 2023
传送口