LNMP搭建,一篇文章足矣!

0.LNMP

这里使用LNMP来完成网站的搭建。LNMP是Linux、Nginx、MySQL、PHP的首字母的组合,一个最常见的应用就是实现动态页面的处理。其基本原理如下
在这里插入图片描述
首先,浏览器发送http request请求到服务器80端口(Nginx),服务器响应并处理web请求,将php脚本通过接口传输协议(网关协议)PHP-FCGI(fast-cgi)传输给(9000端口)PHP-FPM(进程管理程序),然后PHP-FPM调用PHP解析器进程,PHP解析器解析php脚本信息。PHP解析器进程可以启动多个,进行并发执行。然后将解析脚本中的内容并访问数据库,然后将执行结果返回到PHP-FPM,PHP-FPM再通过fast-cgi的形式将脚本信息传送给Nginx,服务器再通过Http response的形式传送给浏览器。浏览器再进行解析与渲染然后进行呈现。

1.Nginx

Nginx相对与Apache运行速度更快、效率更高、软件小巧,Nginx是一个高性能的HTTP和反向代理服务器,淘宝所使用的Tengine是淘宝在Nginx做了二次开发。

1.1 安装步骤

第一步:安装依赖包

一般来来说在官方说明文档中会说明需要哪些依赖包。如果在官方文档中没有说明,可以先尝试直接安装,然后根据报错信息安装依赖包,一般以devel结尾的为依赖包。这里需要按照的依赖包如下

yum -y install gcc pcre-devel openssl-devel

第二步:创建nginx用户

只在源码安装的时候需要创建用户。如果直接使用yum进行安装就不需要创建用户,通过yum安装会自动生成一个普通用户,运行该程序会以该普通用户的身份运行
安全策略是针对用户和组,当电脑中的某个程序启动后,该程序会在电脑中读写文件,当用户启动程序后,该程序会继承该用户的权限,当启用程序的用户是root时,该程序可以在任意位置读写文件。
为了防止入侵者破解服务器的该程序后,掌握了服务器的超级管理员的权限,需要创建一个无法登录的普通用户,通过root用户启动程序后,程序运行后会切换到普通用户

useradd -s /sbin/nologin nginx

第三步:安装nginx

首先先在官网下载自己需要的nginx版本

wget https://nginx.org/download/nginx-1.9.9.tar.gz

然后接下nginx的压缩包

tar -zxvf nginx-1.9.9.tar.gz

然后进入解压后的目录中

cd nginx-1.9.9

完成下面的配置操作

./configure \
--prefix=/usr/local/nginx \		#指定安装路径
--user=nginx \					#指定用户
--group=nginx \					#指定组
--with-http_ssl_module				#开启ssl加密功能

最后完成编译安装

make && make install

可以执行下面的命令查看nginx的版本,并验证nginx成功安装

/usr/local/nginx/sbin/nginx -v

如果页面显示nginx版本表示成功安装。

1.2 nginx常见命令

1.2.1 启动nginx服务

可以执行下面的命令启动nginx

/usr/local/nginx/sbin/nginx

需要注意的是在启动nginx的时候要确保80端口没有服务,因为nginx默认会占用80端口,如果nginx启动的时候80端口已经被占用,会导致启动失败,首先需要关于占用了80端口的服务。
当nginx启动后,可以看到80端口被nignx监听

netstat -antulp | grep nginx

在这里插入图片描述

1.2.2 停止nginx服务

可以使用下面的命令停止nginx服务

/usr/local/nginx/sbin/nginx -s stop

1.2.3 重新加载配置文件

当修改了nginx的配置文件后,可以不用重启nginx服务,而通过命令让nginx重新加载配置文件,就可以读入新修改的配置信息

/usr/local/nginx/sbin/nginx -s reload

1.2.4 小技巧

如果觉得nginx的操作命令过于长,而不方便输入的话,可以使用软连接的方式,缩短nginx的命令

ln -s /usr/local/nginx/sbin/nginx /sbin/

将/usr/local/nginx/sbin/nginx链接到sbin目录下,这样就可以直接使用nginx而不需要使用/usr/local/nginx/sbin/nginx来操作nginx。

1.3 nginx配置文件解析

nginx配置文件的路径为

/usr/local/nginx/conf/nginx.conf

常用内容的说明如下

#usr  nobody;		#以什么身份启动程序
worker_processes  1;	#启动几个nginx
#error_log  logs/error.log;	#错误日志的路径
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;	#存放nginx的进程id
events {
	worker_connections  1024;	#允许的最大连接数
}
server {
	listen       80;		#监听80端口
	server_name  localhost;	#网站的域名
	location / {
		root   html;		#网页的位置,可以使用相对路径也可以使用绝对路径
		index  index.html index.htm;	#默认首页
	}
}

2.安装MariaDB和PHP解释器

这里使用MariaDB代替MySQL,MariDB是MySQL的一个分支,主要由开源社区维护,完全兼容MySQL,包括API和命令行。先MySQL已经属于Oracle旗下,可能存在闭源的风险。MariaDB是一个很好的MySQL替代品。
首先通过yum完成软件的安装

yum -y install mariadb mariadb-server mariadb-devel
yum -y install php php-mysql php-fpm
#php为php的解释器
#php-mysql为php提供链接数据库的功能
#php-fpm为进程管理器服务

安装完成后启动相关服务

systemctl start mariadb
systemctl start php-fpm

成功启动服务后,可以看到我们需要的三个服务都已经成功监听了对应的端口
在这里插入图片描述

我们可以了解一下php-fpm的配置文件,首先配置文件的路径是

/etc/php-fpm.d/www.conf

配置文件的内容如下

[www]
listen = 127.0.0.1:9000		#监听端口
listen.allowed_clients = 127.0.0.1	
usr = apache	
group = apache
pm = dynamic
pm.max_children = 50	#最大的子进程数量
pm.start_servers = 5	#初始的子进程数量
pm.min_spare_servers = 5	#最小的空闲进程数量
pm.max_spare_servers = 35	#最多的空闲进程数量

3.配置nginx

完成了相关服务器的下载,我们要接着配置nginx,也就是让nginx接收到php页面后会往9000端口进行转发。
在nginx的配置文件中一个server配置块可以代表一台虚拟主机,比如
通过域名www.a.com访问到的站点为

server {
	listen       80;
	server_name  www.a.com;

	location / {
		root   html;
		index  index.html index.htm;
		}
	}

其中网站的根目录为/usr/local/nginx/html。通过域名www.b.com访问到的站点为

server {
	listen       80;
	server_name  www.b.com;

	location / {
		root   www;
		index  index.html index.htm;
		}
	}

其中网站的根目录为/usr/local/nginx/www。也就是说用户通过两个域名会访问到不同的网站,但是者两个不同的网站是位于同一主机中的不同目录下,而在用户看来是完全不同的两台主机。
注意到在server块中有一个location字段的配置内容,该字段是用来匹配域名后面的路径,当我们直接使用域名访问网站的时候,实际上我们访问的URL为

http://www.a.com/

最后的/表示访问网站的根目录,如果我们要访问站点test目录下的test.php文件,可以将URL修改为

http://www.a.com/test/test.php

在权限允许的情况下就可以成功访问到test目录下的test.php文件。这个location字段就是用来匹配域名后面的/test/test.php。在上面的例子中,location匹配的是网站的根目录/,这里我们想让nginx发现请求的内容为php文件的时候往9000端口的php-fpm转发,可以将配置文件修改为

location /.php$
{
	root html
	fastcgi_pass 127.0.0.1:9000;
	fastcgi_ince index.php;
	include fastcgi.conf;
}

location可以支持正则匹配,这里表示匹配以.php结尾的文件。如果配置了虚拟主机,在需要转发的虚拟主机的server块中配置,如果没有配置虚拟主机,在第一个配置即可。一般来说在nginx的配置文件中已经存在了该内容,但是处于注释状态,我们只需要取消注释即可。修改完配置文件后,需要重新加载配置文件让其生效

/usr/local/nginx/sbin/nginx -s reload

随后我们在网站的根目录下放一个php文件验证是否配置成功,如果没有修改网站的根目录,默认的根目录为

/usr/local/nginx/html

我们在该目录下放置如下的test.php文件

<?php
$a='hello,world';
echo $a;
?>

随后访问该文件,页面显示如下
在这里插入图片描述

说明站点能够解析我们的php文件。需要注意如果出现无法访问的情况,可以先尝试关闭linux的防火墙和selinux

systemctl stop firewalld
setenforce 0

然后再尝试访问。

4.配置MariaDB

完成了网站的php解析配置,接下来要配置数据库的访问,之前我们已经完成了MariaDB的安装。接下来我们运行命令

mysql_secure_installation

进行相关配置。运行该命令后,首先会让你输入当前的密码,因为我们是刚刚安装并没有密码,所以直接回车使用默认的none
在这里插入图片描述

随后会问你是否设置root密码,输入Y
在这里插入图片描述

然后会让你输入密码,可以输入你想要设置的密码

在这里插入图片描述

接着默认是否删除匿名用户、是否禁止root远程登录、是否删除test数据库、是否重新加载权限表。都直接回车使用默认配置即可。完成了上面的配置后,我们可以使用用户名和密码登录数据库
在这里插入图片描述

5.连接MariaDB

完成了上面的配置后,我们需要在MariaDB中创建一个数据库,并存放一些信息用于接下来的测试

create database test;
use test;
create table user(name varchar(20),passwd varchar(255));
insert into user value('Tom',md5('123456'));
insert into user value('admin',md5('admin'));

完成了上面的操作后,可以看到数据库中存在两条数据
在这里插入图片描述

随后我们完成下面的登录逻辑的编写
login.html

<!DOCTYPE HTML>
<html>
	<head>
		<meta charset="UTF-8">
		<title>login</title>
	</head>
	<body>
		<form action="login.php" method="POST" target="_self">
			username:<input type="text" name="username"/><br />
			password:<input type="password" name="password"/><br />
			<input type="submit" value="login"><hr />
		</form>
	</body>
</html>

login.php

<?php
#1.从前端获取数据
$username=$_REQUEST["username"];
$password=$_REQUEST["password"];
#2.连接数据库
$conn=mysqli_connect('localhost','root','123456','test');
if(!$conn) die("<script>alert('Sorry,cannot connect to database,please login later!')</script>");
#3.构造查询语句
$md5_password=md5($password);
$sql="select * from user where name='$username' and password='$md5_password' limit 0,1";
#4.进行查询,并获得结果
$result=mysqli_query($conn,$sql);
$row=mysqli_fetch_array($result);
#5.进行结果验证
if($row["name"]==$username && $row["password"]==$md5_password)
{
 echo "Welcome ".$username."<hr/>";
}else{
 echo "<script>alert('Sorry,please check your username or password!')</script>";
}
?>

随后我们访问login.html进行登录
在这里插入图片描述

当输入正确的用户名和密码,页面显示
在这里插入图片描述

当输入错误的用户名或者密码的时候,页面发生弹窗
在这里插入图片描述

如果站点能够正确的验证用户名与密码的匹配情况,说明站点可以成功的于数据库进行交互,也就是说数据库配置成功。

6.完结撒花

自此我们便完成了LNMP环境的搭建,在最后一步的用户登录页面,因为于数据库交互的是php文件,所以站点可以成功的解析php。又因为站点可以成功的识别用户名和密码的匹配,说明php可以正常的雨数据库进行交互,也就是说完整的用户登录验证过程会跑通整个的LNMP流程。如果用户登录的逻辑可以正常执行,说明整个LNMP环境搭建成功。

7.CMS

完成了LNMP的搭建后。可以选择一个自己喜欢的CMS,来完成网站的建立。CMS有很多种,常见的有dedeCMS、Wordpress等等。可以根据自己的需要选择自己喜欢的CMS。通常只需要将CMS的源码放在网站的根目录。然后通过浏览器访问CMS的安装文件,剩下的交给CMS完成即可。搭建后的效果欢迎查看我的个人博客西西弗斯的巨石

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章