lnmp架构分离

1610 字
8 分钟
lnmp架构分离

文档参考:

  • CentOS7 源码安装MySQL 8.0
  • CentOS7 源码安装Nginx
  • CentOS7 源码安装PHP

一、前提需求#

  • 至少准备三台机器,分别安装好nginx、mysql、php
  • 各自网络互通

二、实现效果#

使用lnmp架构分离来搭建wordpress博客网站,实现当访问博客网站时,nginx接受请求,若是静态资源则由nginx服务器直接处理并返回结果,若是动态资源,则将请求转发至php服务器处理,若是数据库文件则由php服务器向mysql服务器请求

image-20260304164049854
image-20260304164049854

三、mysql服务器配置#

3.1 创建 WordPress 数据库和专用用户#

-- 创建数据库(名称可自定义,比如 wordpress)
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建用户
CREATE USER 'wordpress'@'%' IDENTIFIED BY 'wordpress';
-- 授权该用户操作 wordpress 数据库的所有权限
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出 MySQL
EXIT;

3.2 修改 MySQL 配置,允许远程访问#

修改编辑 MySQL 配置文件:

Terminal window
vim /data/mysql/mysql/my.cnf # 此为自定义的文件,具体位置根据自身机器决定
# 修改如下行,# 允许所有IP访问
bind-address = 0.0.0.0
systemctl restart mysqld

四、php服务器配置#

4.1 配置 PHP-FPM 监听ip#

Terminal window
vim /usr/local/software/php/etc/php-fpm.d/www.conf
# 修改如listen行,监听所有ip或指定监听网段
# listen = 10.1.1.35:9000
listen = 0.0.0.0:9000
# (可选)在 listen 行下方添加 Nginx 服务器的 IP 白名单
listen.allowed_clients = 10.1.1.34
systemctl restart php-fpm

4.2 下载wordpress源码#

Terminal window
cd /usr/local/src
wget https://wordpress.org/wordpress-6.8.3.tar.gz
tar -xzf wordpress-6.8.3.tar.gz -C /usr/local/software
# 修改目录属主和属组,改为与php的www.conf配置里面的user用户一致
chown -R php:php /usr/local/software/wordpress
# 修改文件权限
find /usr/local/software/wordpress -type d -exec chmod 755 {} \;
find /usr/local/software/wordpress -type f -exec chmod 644 {} \;

4.3 创建测试文件#

Terminal window
# 创建测试文件用于后续测试php与mysql的联通性
cd /usr/local/software/wordpress
vim mysql_test.php
# 粘贴如下内容
<?php
// 替换为你创建的 MySQL 用户名和密码及数据库
$conn = mysqli_connect('10.1.1.30', 'wordpress', 'wordpress', 'wordpress');
if ($conn) {
echo "PHP 连接 MySQL 成功!";
mysqli_close($conn);
} else {
echo "连接失败:" . mysqli_connect_error();
}
?>

五、修改nginx服务器配置#

5.1 创建 Nginx 虚拟主机配置文件#

Terminal window
cd /opt/nginx/conf/conf.d
# 粘贴如下配置
#####################################
server {
listen 10000;
server_name wp.laixianshen.com; # 若有域名可替换,比如 blog.example.com
# 静态文件目录(Nginx 本机,可放 WordPress 静态资源,也可空)
root /usr/local/software/wordpress;
index index.php index.html index.htm;
access_log /opt/nginx/logs/wordpress_access.log;
error_log /opt/nginx/logs/wordpress_error.log warn;
# 新增全局 try_files 规则(核心修复)
# 无论访问根路径还是其他路径,只要找不到对应文件 / 目录,就自动转发到 index.php
try_files $uri $uri/ /index.php$is_args$args;
# 静态文件缓存,提升速度
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d; # 缓存30天
add_header Cache-Control "public, max-age=2592000";
}
# 核心:转发 PHP 请求到 PHP 服务器
location ~ \.php$ {
# 指向 PHP 服务器的 IP 和端口
fastcgi_pass 10.1.1.35:9000;
fastcgi_index index.php;
# 注意:这里的 SCRIPT_FILENAME 是 PHP 服务器上的路径(/var/www/html),不是 Nginx 本机
fastcgi_param SCRIPT_FILENAME /usr/local/software/wordpress$fastcgi_script_name;
include fastcgi_params;
}
# 禁止访问隐藏文件(比如 .htaccess)
location ~ /\.ht {
deny all;
}
}
###################################################
nginx -t # 检查语法,无报错再重启
systemctl restart nginx

5.2 telnet测试连通性#

使用telnet来测试 Nginx服务器 到 PHP服务器 的连通性

Terminal window
telnet 10.1.1.35 9000

六、网站测试#

使用浏览器访问nginx的ip10.1.1.34:10000

发现可以正常访问到wordpress的安装页面,但样式不对,这是因为nginx没有转发CSS、JS 等静态文件请求到php服务器上

1. 解决方案一:在 Nginx 服务器上部署静态资源#

同步代码:将 PHP 服务器(10.1.1.35)上的 WordPress 代码,完整复制到 Nginx 服务器(10.1.1.34)的 /usr/local/software/wordpress 目录下。

Terminal window
# 在 Nginx 服务器 (10.1.1.34) 上执行
scp -r root@10.1.1.35:/usr/local/software/wordpress /usr/local/software/

这样当需要静态文件资源时,会从nginx服务器本地获取,但问题是需要经常同步两台机器的目录,因此不推荐

2. 解决方案二:修改 Nginx 配置,转发静态资源请求到 PHP 服务器#

修改虚拟主机配置,修改如下参数,其余保持不变

Terminal window
# 全局 try_files 规则,所有找不到的文件都转发给 PHP-FPM
location / {
try_files $uri /index.php?$args;
}
# 静态文件缓存规则(保留)
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
# 转发静态资源请求到 PHP 服务器
proxy_pass http://10.1.1.35;
expires 30d;
add_header Cache-Control "public, max-age=2592000";
}

这样nginx就可以将静态文件资源请求转发到php服务器上,但需要注意的是使用的是proxy_pass参数,所以php服务器也需要安装nginx。

3. 使用共享存储,将存储文件分离(推荐)#

将wordpress目录分离出来,存放至nfs服务器中,nginx和php服务器通过nfs协议从nfs服务器中获取资源

3.1 配置步骤#

一台可以正常使用的nfs服务器

  1. 配置nfs服务器
Terminal window
# 创建共享目录
mkdir /wordpress
# 将php服务器的wordpress目录复制到nfs服务器上
scp -r root@10.1.1.35:/usr/local/software/wordpress/* /wordpress
# 修改nfs配置文件
vim /etc/exports
# 添加如下配置
/wordpress *(rw,sync,no_root_squash)
# 刷新配置
exportfs -ra
#查看已共享目录
showmount -e
  1. nginx和php服务器进行挂载
Terminal window
# 安装nfs客户端
yum install -y nfs-utils
# nginx服务器挂载
[root@web-34 ~]#mount -t nfs 10.1.1.28:/wordpress /usr/local/software/wordpress/
#php服务器挂载
[root@php-35 ~]#mount -t nfs 10.1.1.28:/wordpress /usr/local/software/wordpress/
# (可选)永久挂载,将以下文件写入到/etc/fstab
10.1.1.28:/wordpress /usr/local/software/wordpress nfs defaults,_netdev,auto 0 0
  1. nginx和php服务器对于共享目录的权限配置

nginx和php服务器对于推荐改为一样的uid,这样在不同的机器中所看到的文件所属人都是他们自己,利于文件读写

以下为不同服务器显示的文件所属人

nginx 服务器:

image-20260305102833374
image-20260305102833374

php服务器:

image-20260305102904130
image-20260305102904130

nfs服务器:

image-20260305103231054
image-20260305103231054

使用解决方案三后,即可正常显示wordpress中的静态文件资源及用户上传的图片资源。即使php后端修改了静态资源文件,nginx也能实时读取到

6.1 进入安装页面配置mysql#

打开浏览器,访问 http://10.1.1.34:10000(Nginx 服务器 IP),会进入 WordPress 安装向导;

选择 “简体中文”,点击 “现在就开始”;

填写数据库信息:

  • 数据库名:wordpress(第一步创建的)
  • 用户名:wordpress
  • 密码:wordpress(你自定义的)
  • 数据库主机:10.1.1.30(MySQL 服务器 IP)
  • 表前缀:默认 wp_ 即可

点击 “提交”→“运行安装程序”;

填写博客标题、管理员账号 / 密码 / 邮箱,点击 “安装 WordPress”;

安装完成后,登录后台即可使用。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

lnmp架构分离
https://2233941.xyz/posts/lnmp架构分离/
作者
lumifly
发布于
2026-04-13
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
lumifly
不逐世间万丈星河,自守一隅细碎明光
✨ 今日一言
" 加载中... "
——
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
本年还剩 -- --%
本月还剩 -- --%
本周还剩 -- --%
距离--
--
--
天气预报
站点统计
文章
24
分类
1
标签
15
总字数
136,852
运行时长
0
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.12.1
文章许可
CC BY-NC-SA 4.0

文章目录