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.参照个人博客搭建流程搭建个人博客.