lnmp架构搭建

内容概述

1.nginx的location配置
-1.1 语法
-1.2 location匹配符
-1.3 优先级验证
2.LNMP架构
-2.1 什么是LNMP架构?
-2.2 LNMP架构的工作方式
-2.3 用户访问流程
3.LNMP架构的搭建
-3.1.部署nginx
-3.2.安装php
-3.3.php代理nginx
-3.4.部署mariadb数据库
-3.5.关联php与mariadb并测试
4.搭建wordpress博客
5.完整流程总结

内容详细

1.nginx的location配置

引子:
	我们使用nginx location可以控制访问网站的路径,但是一个server可以有多个location配置,多个location间的优先级应该如何区分?

1.1 语法

Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
        location @name { ... }
Default:    —
Context:    server, location

1.2 location匹配符

匹配符 匹配规则 优先级
= 精确匹配 1
^~ 以某个字符串开头 2
~ 区分大小写的正则匹配 3
~* 不区分大小写的正则匹配(匹配的正则范围更广) 3
/ 通用匹配,任何请求都会匹配到 4
优先级顺序:
=高于^~高于~*等于~高于/

1.3 优先级验证

server {
    listen 80;
    server_name linux.test.com;
    location / {
        default_type text/html;
        return 200 "location /";
    }
 
    location =/ {
        default_type text/html;
        return 200 "location =/";
    }
 
    location ~ / {
        default_type text/html;
        return 200 "location ~/";
    }
 
    # location ^~ / {
    #   default_type text/html;
    #   return 200 "location ^~";
    # }
}
对不同的location分别进行注释,多次访问,就能得出优先级先后顺序了...

2.LNMP架构

2.1 什么是LNMP架构?

LNMP是一套技术的组合,L表示linux操作系统,N表示nginx,M表示MySQL数据库及其分支,P表示PHP或者Python.
当然,LNMP架构里并不只有这些服务,根据生产的需求,还有很多服务:
redis\elasticsearch\kibana\logstash\zabbix\git\jenkins\kafka\hbase\hadoop\spark\flink等

2.2 LNMP架构的工作方式

1.因为和Apache的运行方式不同,所以nginx服务不能够处理动态请求,那么当用户发起动态请求时, Nginx又是如何进行处理的?
补充:
	# 静态请求:请求的内容是静态文件就是静态请求
	1)静态文件:文件上传到服务器后,永远不会改变的文件就是静态文件.
	2)html就是一种标准的静态文件
	# 动态请求:请求的内容是动态的就是动态请求
	不是真实存在于服务器上的内容,是通过数据库或者其他服务拼凑成的数据.
2.当用户发起http请求时,请求会被nginx处理.如果是静态资源请求nginx则直接返回,如果是动态请求nginx则通过fastcgi协议转交给后端的PHP程序处理.

2.3 用户访问流程

聊完了上面的内容,我们会对用户的访问流程有更加深刻的理解:
1.浏览器输入域名,浏览器会拿着域名去DNS服务器解析
2.DNS服务器会将域名解析成IP
3.浏览器会与IP对应的服务器建立TCP\IP连接
4.连接建立完成,会向服务器发起http请求,请求nginx
5.nginx会判断请求是动态的还是静态的
    # 静态请求
    location \.jpg$ {
        root /code;
    }
    # 动态请求
    location \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        ... ...
    }
6.如果是静态请求,nginx去根目录获取,直接返回
7.如果是动态请求,nginx会通过fastcgi协议连接PHP服务的php-fpm管理进程
8.php-fpm管理进程会下发工作给 wrapper工作进程
9.wrapper工作进程判断是不是简单的php内容
10.如果只是php内容,则使用php解析器解析后直接返回
11.如果还需要读取数据库,wrapper工作进程会去数据库读取数据,再返回数据
12.数据流转过程:
    1)请求:浏览器 > 负载均衡 > nginx > php-fpm > wrapper > mysql
    2)响应:mysql > wrapper > php-fpm > nginx > 负载均衡 > 浏览器

3.LNMP架构的搭建

3.1.部署nginx

1.部署(使用此脚本即可)
nginx部署已经老生常谈了,这里就给出官方源的部署方式吧...
#!/bin/bash
# 配置官方源,nginx官网: https://nginx.org/
cd /etc/yum.repos.d && touch nginx.repo
cat > /etc/yum.repos.d/nginx.repo << EOF
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=0
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
echo "官方源配置完毕"
# 清除,生成缓存
yum clean all >/dev/null 2>&1
yum makecache >/dev/null 2>&1
echo "配置完毕"
# 查看有哪些nginx版本可以安装
yum list nginx --show-duplicates
# 安装指定nginx的指定版本
yum install -y nginx-1.18.0 >/dev/null 2>&1
echo "安装完毕"
# 查看安装的nginx版本
nginx -v
# 启动nginx并加入开机自启
systemctl enable --now nginx
echo "nginx已启动."

2.配置配置文件
# 创建www用户
groupadd www -g 666 >/dev/null 2>&1
useradd www -u 666 -g 666 -s /sbin/nologin -M >/dev/null 2>&1
vim /etc/nginx/nginx.conf
user www	# 把用户改成 www

3.2.安装php

1、安装yum源
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
# 清除之前部署的PHP
yum remove php-mysql-5.4 php php-fpm php-common

2、安装PHP
yum -y install php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-gd php72w-mcrypt php72w-mbstring php72w-pdo php72w-xml php72w-fpm php72w-mysqlnd php72w-opcache php72w-pecl-memcached php72w-pecl-redis php72w-pecl-mongodb

3、验证PHP
php -v
4.配置php (统一用户,很重要,部署nginx时最好把www用户创建好)
vim /etc/php-fpm.d/www.conf 
user = www
group = www
5.启动服务
 systemctl enable --now php-fpm		# 加入开机自启
6.验证启动
 ps -ef | grep php-fpm | grep -v grep
root      21987      1  0 11:40 ?        00:00:02 php-fpm: master process (/etc/php-fpm.conf)
www       21988  21987  0 11:40 ?        00:00:14 php-fpm: pool www
www       21989  21987  0 11:40 ?        00:00:00 php-fpm: pool www
www       21990  21987  0 11:40 ?        00:00:00 php-fpm: pool www
www       21991  21987  0 11:40 ?        00:00:00 php-fpm: pool www
www       21992  21987  0 11:40 ?        00:00:00 php-fpm: pool www
www       22040  21987  0 11:49 ?        00:00:00 php-fpm: pool www

3.3.php代理nginx

1.关联语法
# fastcgi_pass,nginx连接php的代理协议
Syntax: fastcgi_pass address;
Default:    —
Context:    location, if in location
 
# 指定请求的文件
Syntax: fastcgi_param parameter value [if_not_empty];
Default:    —
Context:    http, server, location
 
# 指定默认的php页面
Syntax: fastcgi_index name;
Default:    —
Context:    http, server, location

2.配置
server站点配置文件
server {
        listen 80;
        location / {
            root /opt/kaoshi;
            index index.html index.php;
        }
        location ~* \.php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_param SCRIPT_FILENAME /opt/kaoshi/$fastcgi_script_name;
            include fastcgi_params;
        }
}
php文件
vim /opt/php/index.php
<?php
phpinfo();
3.重载配置
systemctl reload php-fpm nginx
补充:修改nginx配置文件上传文件大小配置
vim /etc/nginx/nginx.conf
http {
        ... ...
        client_max_body_size 200m;		# 添加此行,大小视情况而定
        ... ...
    }
# php代理nginx可能会出现的问题
1.权限问题
统一nginx和php的用户并为站点目录授权
vim /etc/php-fpm.d/www.conf
User=www
Group=www
chown -R www.www /opt/kaoshi
2.上传文件的大小问题
	1)修改nginx的主配置文件
vim /etc/nginx/nginx.conf
http {
        ... ...
        client_max_body_size 200m;		# 添加此行,大小视情况而定
        ... ...
    }
     2)修改php配置文件
vim /etc/php.ini
upload_max_filesize = 200M
post_max_size = 200M
3.重新载入配置文件
systemctl reload php-fpm nginx
ps:一些细节问题,在测试中发现配置文件都正确且规范,但仍然报错,原因可能与站点目录下的"upload_file.php"里的路径与站点目录路径不符有关,需要修改此文件

3.4.部署mariadb数据库

1.安装
yum install mariadb mariadb-server -y
2.启动服务
systemctl enable --now mariadb
3.验证启动
 ps -ef | grep mariadb
mysql     11006  10841  1 12:06 ?        00:00:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock
4.设置密码
mysqladmin -uroot password '123456'
5.登录
mysql -uroot -p123456

3.5.关联php与mariadb并测试

1.编写php文件
 <?php
        $servername = "192.168.174.51";
        $username = "root";
        $password = "123456";

        // 创建连接
        $conn = mysqli_connect($servername, $username, $password);

        // 检测连接
        if (!$conn) {
            die("Connection failed: " . mysqli_connect_error());
        }
        echo "大兄弟,你已经连上咱公司的数据库了...";
    ?>
2.修改数据库远程连接权限(在Mysql命令行中执行)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
3.访问测试

4.搭建wordpress博客

# wordpress官网:https://cn.wordpress.org/download/
# 下载链接:https://cn.wordpress.org/latest-zh_CN.tar.gz
1、下载代码包
wget https://cn.wordpress.org/latest-zh_CN.tar.gz

2、解压
tar -xf latest-zh_CN.tar.gz

3、授权
chown -R www.www wordpress

4、编写配置文件
[root@web03 wordpress]# cat /etc/nginx/conf.d/wordpress.conf 
server {
    listen 80;
    server_name www.test.com;
    location / {
        root /opt/wordpress/;
		index index.html index.php;
    }
    location ~* \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME /opt/wordpress/$fastcgi_script_name;
        include fastcgi_params;
    }
}

5、重启nginx
systemctl restart nginx

6、创建数据库
MariaDB [(none)]> create database wordpress;

7、访问安装

5.完整流程总结

1.部署nginx,创建好用户,统一用户,修改好配置文件,启动服务
2.安装php,在配置文件中统一用户,启动服务
3.php代理nginx,为站点根目录授权,配置站点".conf文件",重载配置.
4.安装部署mariadb数据库,创建登录用户和密码,在站点根目录下配置.php文件,修改数据库远程连接权限(在Mysql命令行中执行).
5.参照个人博客搭建流程搭建个人博客.
posted @ 2021-08-13 16:13  堇雪月寒风  阅读(59)  评论(0编辑  收藏  举报
Live2D