在同一台服务器上部署多个 WordPress 站点是常见且成熟的做法,主要有以下几种主流方案,可根据你的技术能力、资源需求和管理偏好选择:
✅ 一、推荐方案:多站点(Multisite)网络(官方原生支持)
✅ 适合:品牌统一、管理集中、共享插件/主题、需统一更新的场景(如企业子站、学校院系站、博客联盟)
❌ 不适合:各站点完全独立(不同客户、不同数据库权限、不同安全策略)
✅ 优势:
- 单个 WordPress 安装,一个后台统一管理所有子站
- 共享核心文件、插件、主题(可单独启用/禁用)
- 用户系统可共享或隔离(网络级用户 vs 子站级用户)
- 数据库表前缀区分(如
wp_2_posts,wp_3_options),节省资源
🔧 部署步骤:
-
启用 Multisite
在wp-config.php中添加(必须在require_once...之前):define('WP_ALLOW_MULTISITE', true); -
登录后台 → 工具 → “配置网络” → 选择 子域名(
site1.example.com) 或 子目录(example.com/site1)⚠️ 子域名需 DNS 解析通配符(
*.example.com → A 记录指向服务器 IP);子目录更简单,适合新手。 -
按提示修改
wp-config.php和.htaccess(Apache)或 Nginx 配置(见下文) -
创建新站点:后台 → “我的站点” → “管理网络” → “站点” → “添加新站点”
📝 注意事项:
- 插件/主题需兼容 Multisite(多数主流插件已支持)
- 避免使用依赖独立数据库的插件(如某些会员系统)
- 备份需用 Multisite-aware 工具(如 All-in-One WP Migration + Multisite 扩展)
✅ 二、独立安装(推荐给生产环境高隔离需求)
✅ 适合:不同客户、不同安全等级、不同 PHP 版本/扩展需求、需独立备份与升级
❌ 缺点:维护成本略高(需逐个更新)
🗂 目录结构示例:
/var/www/
├── site1.example.com/ # 独立 WordPress
├── site2.example.com/ # 独立 WordPress
├── site3.example.com/ # 独立 WordPress
└── shared/ # 可选:共享插件/主题(通过符号链接或 Composer)
🔧 关键配置要点:
| 组件 | 配置说明 |
|---|---|
| Web 服务器 | ✅ Apache:为每个域名配置 <VirtualHost>✅ Nginx:为每个域名配置 server { ... } 块,指向对应根目录 |
| 数据库 | ✅ 每个站点使用独立数据库(或同一库中不同前缀,如 site1_, site2_)⚠️ 强烈建议独立数据库:避免单点故障、权限隔离、备份灵活 |
| PHP 配置 | ✅ 可为每个站点设置不同 php.ini(如 php_admin_value memory_limit 256M)或使用 PHP-FPM Pool 隔离 |
| SSL 证书 | ✅ 使用 Let’s Encrypt(certbot --nginx -d site1.com -d www.site1.com)自动签发 |
🌐 Nginx 示例(单站点):
server {
listen 80;
server_name site1.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name site1.example.com;
root /var/www/site1.example.com;
index index.php;
ssl_certificate /etc/letsencrypt/live/site1.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/site1.example.com/privkey.pem;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 根据版本调整
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
✅ 运行
sudo nginx -t && sudo systemctl reload nginx生效
✅ 三、容器化方案(Docker + Docker Compose)⭐️ 现代运维首选
✅ 适合:追求环境一致性、快速部署/销毁、CI/CD 集成、资源隔离强
🐳 示例:1 个 Nginx + 多个 WordPress 容器(每个带独立 MySQL)
📄 docker-compose.yml(简化版,含 2 个站点):
version: '3.8'
services:
# 共享 Nginx 反向X_X
nginx:
image: nginx:alpine
ports: ["80:80", "443:443"]
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/certs:/etc/nginx/certs
- ./www:/var/www:ro
depends_on: [wp-site1, wp-site2]
# 站点 1
wp-site1:
image: wordpress:php8.2-apache
environment:
WORDPRESS_DB_HOST: mysql-site1:3306
WORDPRESS_DB_NAME: wp_site1
WORDPRESS_DB_USER: wpuser1
WORDPRESS_DB_PASSWORD: securepass1
volumes:
- ./www/site1.example.com:/var/www/html
depends_on: [mysql-site1]
mysql-site1:
image: mysql:8.0
environment:
MYSQL_DATABASE: wp_site1
MYSQL_USER: wpuser1
MYSQL_PASSWORD: securepass1
MYSQL_ROOT_PASSWORD: rootpass1
volumes:
- ./mysql/site1:/var/lib/mysql
# 站点 2(同理复制配置,改名称/密码/路径)
wp-site2: { ... }
mysql-site2: { ... }
✅ 优点:彻底隔离、一键启停、快照备份、轻松横向扩展
✅ 四、其他实用技巧 & 最佳实践
| 场景 | 推荐方案 |
|---|---|
| 共享媒体库? | ✅ 使用插件 Network Shared Media(Multisite) ❌ 独立安装不建议硬链接,易出错 |
| 统一登录(SSO)? | ✅ Multisite 天然支持 ✅ 独立安装可用插件 MiniOrange SSO |
| 备份策略 | ✅ Multisite:用 UpdraftPlus(勾选“包含网络数据”) ✅ 独立安装:脚本化 mysqldump + tar + 定时任务(cron) |
| 性能优化 | ✅ 全局:OPcache + Redis 缓存(WP-Redis 插件) ✅ 各站点:启用对象缓存、CDN(Cloudflare/BunnyCDN) |
| 安全加固 | ✅ 所有方案:禁用文件编辑(define('DISALLOW_FILE_EDIT', true);)✅ 独立安装:每个站点用不同数据库用户(最小权限原则) ✅ Web 服务器:限制 wp-config.php 访问(Nginx 加 location ~ ^/wp-config.php$ { deny all; }) |
🚫 应避免的错误做法
- ❌ 在同一数据库中混用多个站点且无表前缀区分 → 必然冲突
- ❌ 多站点共用管理员账号且未限制角色 → 权限失控风险
- ❌ 用符号链接共享
wp-content而不测试插件兼容性 → 可能崩溃 - ❌ 忽略 PHP 内存限制(尤其 Multisite)→ 建议
memory_limit = 256M或更高
✅ 总结:如何选择?
| 你的需求 | 推荐方案 |
|---|---|
| ✅ 快速上线 3-5 个内部子站,统一管理 | WordPress Multisite(子目录) |
| ✅ 为客户托管多个独立网站,要求完全隔离 | 独立安装 + 独立数据库 + Nginx 虚拟主机 |
| ✅ 技术团队熟悉 Docker,追求可复现与弹性 | Docker Compose(每个站点独立容器栈) |
| ✅ 需要混合模式(如主站独立 + 分支用 Multisite) | 组合方案:主站独立 + 子项目用 Multisite 子网络 |
需要我为你:
- ✅ 生成完整的 Nginx/Apache 虚拟主机配置模板?
- ✅ 提供 Multisite 的详细
.htaccess或 Nginx 重写规则? - ✅ 写一个自动化部署多个独立 WordPress 的 Bash 脚本?
- ✅ 输出 Docker Compose 的完整可运行示例(含 SSL、备份、监控)?
欢迎告诉我你的服务器环境(Ubuntu/CentOS?Nginx/Apache?是否已有域名?),我可以为你定制化配置 👇
云小栈