在单台服务器上部署两个独立的 WordPress 站点,核心思路是“多站点共存”。这通常通过 Web 服务器(如 Nginx 或 Apache)配置虚拟主机(Virtual Host),结合不同的域名解析和数据库实例来实现。
以下是基于主流 Linux 环境(CentOS/Ubuntu)+ Nginx + MySQL/MariaDB + PHP-FPM 的标准生产级方案。该方案强调隔离性、安全性和可维护性。
一、整体架构设计
- 操作系统:Linux(推荐 CentOS 7+/Alibaba Cloud Linux 2/3 或 Ubuntu 20.04+)
- Web 服务器:Nginx(高性能、低资源占用)
- 后端语言:PHP 8.0+(通过 PHP-FPM 运行)
- 数据库:MySQL 8.0 或 MariaDB 10.5+
- 站点结构:
- 站点 A:
www.site-a.com→ 独立目录/var/www/site-a - 站点 B:
www.site-b.com→ 独立目录/var/www/site-b - 每个站点拥有独立的数据库用户、独立的 Nginx 配置文件
- 站点 A:
✅ 优势:权限隔离、故障互不影响、便于单独备份和维护。
二、前置准备
1. 更新系统并安装基础工具
# CentOS/RHEL
sudo yum update -y
sudo yum install epel-release -y
sudo yum install nginx mariadb-server php-fpm php-mysqlnd git curl wget unzip -y
# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y
sudo apt install nginx mariadb-server php-fpm php-mysql git curl wget unzip -y
2. 启动服务并设置开机自启
sudo systemctl enable --now nginx mariadb php-fpm
三、数据库配置(为两个站点创建独立数据库和用户)
登录 MySQL:
sudo mysql -u root -p
执行以下 SQL 语句:
-- 创建站点A的数据库和用户
CREATE DATABASE site_a_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'site_a_user'@'localhost' IDENTIFIED BY 'StrongPassword_A!';
GRANT ALL PRIVILEGES ON site_a_db.* TO 'site_a_user'@'localhost';
FLUSH PRIVILEGES;
-- 创建站点B的数据库和用户
CREATE DATABASE site_b_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'site_b_user'@'localhost' IDENTIFIED BY 'StrongPassword_B!';
GRANT ALL PRIVILEGES ON site_b_db.* TO 'site_b_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
⚠️ 安全提示:使用强密码,避免使用
'root'@'%'这种远程访问权限。
四、下载并解压 WordPress
1. 创建网站根目录
sudo mkdir -p /var/www/site-a /var/www/site-b
2. 下载 WordPress
cd /tmp
wget https://wordpress.org/latest.tar.gz
tar xzf latest.tar.gz
3. 复制至对应目录
sudo cp -r wordpress/* /var/www/site-a/
sudo cp -r wordpress/* /var/www/site-b/
4. 设置正确权限(关键!)
# 所有者设为 nginx 用户(CentOS 中为 nginx,Ubuntu 中为 www-data)
sudo chown -R nginx:nginx /var/www/site-a /var/www/site-b
# 设置目录权限为 755,文件为 644
find /var/www/site-a -type d -exec chmod 755 {} ;
find /var/www/site-a -type f -exec chmod 644 {} ;
find /var/www/site-b -type d -exec chmod 755 {} ;
find /var/www/site-b -type f -exec chmod 644 {} ;
📌 注意:WordPress 需要写入
wp-content/uploads等目录,若后续出现权限问题,可临时赋予uploads目录写权限,但生产环境建议使用 SELinux/AppArmor 配合策略管理。
五、配置 Nginx 虚拟主机
1. 创建站点 A 的配置
sudo nano /etc/nginx/conf.d/site-a.conf
内容如下:
server {
listen 80;
server_name www.site-a.com site-a.com;
root /var/www/site-a;
index index.php index.html;
# 日志
access_log /var/log/nginx/site-a-access.log;
error_log /var/log/nginx/site-a-error.log;
# 静态资源缓存
location ~* .(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
# PHP 处理
location ~ .php$ {
fastcgi_pass unix:/run/php-fpm/www.sock; # CentOS 路径可能不同
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
# 禁止访问隐藏文件和 wp-config.php
location ~ /. {
deny all;
}
location = /wp-config.php {
deny all;
}
# WordPress 固定链接支持
location / {
try_files $uri $uri/ /index.php?$args;
}
}
2. 创建站点 B 的配置
sudo nano /etc/nginx/conf.d/site-b.conf
内容与上面类似,仅修改:
server_name→www.site-b.com site-b.comroot→/var/www/site-baccess_log/error_log→ 指向各自的日志文件
3. 测试并重载 Nginx
sudo nginx -t
sudo systemctl reload nginx
六、完成 WordPress 安装
- 确保你的域名已解析到服务器 IP(或通过本地 hosts 测试)。
- 浏览器访问
http://www.site-a.com,开始图形化安装:- 输入数据库名:
site_a_db - 用户名:
site_a_user - 密码:你设置的强密码
- 数据库主机:
localhost
- 输入数据库名:
- 对站点 B 重复上述步骤,使用
site_b_db和site_b_user。
七、增强安全性与性能优化(可选但推荐)
1. 启用 HTTPS(Let’s Encrypt)
使用 Certbot 自动申请 SSL 证书:
sudo yum install certbot python3-certbot-nginx # CentOS
sudo apt install certbot python3-certbot-nginx # Ubuntu
sudo certbot --nginx -d www.site-a.com -d site-a.com
sudo certbot --nginx -d www.site-b.com -d site-b.com
Certbot 会自动修改 Nginx 配置并重载。
2. 限制 PHP 执行权限
编辑 /etc/php-fpm.d/www.conf(或 /etc/php/8.0/fpm/pool.d/www.conf):
security.limit_extensions = .php
disable_functions = passthru, exec, system, shell_exec, proc_open, popen
重启 PHP-FPM:
sudo systemctl restart php-fpm
3. 防火墙开放端口
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
八、常见问题排查
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 502 Bad Gateway | PHP-FPM 未运行或 socket 路径错误 | 检查 systemctl status php-fpm;确认 Nginx 中 fastcgi_pass 路径正确 |
| 权限拒绝(Permission Denied) | 文件所有者不是 nginx 用户 | 重新执行 chown -R nginx:nginx /var/www/... |
| 固定链接失效 | Nginx 未启用 try_files |
检查 Nginx 配置中的 location / 块是否包含 try_files $uri $uri/ /index.php?$args; |
| 数据库连接失败 | 密码错误或用户无权限 | 登录 MySQL 检查 SHOW GRANTS FOR 'user'@'localhost'; |
九、扩展建议
- 容器化部署:若追求更高隔离性和迁移能力,推荐使用 Docker Compose 为每个站点创建独立容器(Nginx + PHP-FPM + MySQL),实现真正的环境隔离。
- 反向X_X + CDN:上线后可接入阿里云 CDN 或腾讯云 CDN 提速静态资源,并隐藏源站 IP。
- 监控与备份:配置定时任务(cron)自动备份数据库和文件目录,或使用宝塔面板、aaPanel 等可视化工具简化运维(适合非资深开发者)。
✅ 总结:在单台服务器上运行多个 WordPress 站点是完全可行且常见的做法。关键在于网络层隔离(Nginx vhost)、数据层隔离(独立数据库)、文件系统隔离(独立目录)。只要遵循最小权限原则和规范配置,即可稳定运行。
CLOUD云枢