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完成即可。搭建後的效果歡迎查看我的個人博客西西弗斯的巨石

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