在一台云服务器上跑多个 WordPress 站点,是中小站长、开发者以及小型工作室最常见的部署场景。这不仅能节省成本,还能集中管理资源。
核心思路其实就两个词:虚拟主机(Virtual Host) 和 多实例隔离。
下面我按从“简单粗暴”到“专业规范”的几种主流方案来拆解,你可以根据自己的技术栈和服务器配置来选择。
方案一:LNMP/LAMP 环境 + Nginx/Apache 虚拟主机(最经典、最推荐)
这是绝大多数 Linux 云服务器用户的选择。假设你已经通过宝塔面板、1Panel 或者手动安装了 LNMP(Linux + Nginx + MySQL/MariaDB + PHP)。
1. 数据库层面
WordPress 的核心是 PHP + MySQL。你需要为每个网站创建独立的数据库和用户。
- 操作:进入 phpMyAdmin 或命令行,创建
db_site1,db_site2等数据库。 - 注意:虽然可以共用一个 MySQL 实例,但建议为不同站点设置不同的数据库用户权限,避免代码漏洞导致数据泄露互相影响。
2. 文件目录层面
在 Web 根目录下建立独立的文件夹。
- 例如:
/var/www/html/site1.com和/var/www/html/site2.com。 - 每个文件夹里放对应 WordPress 的核心文件。
3. Nginx 配置(关键步骤)
Nginx 通过 server_name 来区分请求。你需要修改 Nginx 配置文件(通常在 /etc/nginx/conf.d/ 或 /usr/local/nginx/conf/vhost/,取决于你的安装方式)。
创建一个针对 site1.com 的配置文件 site1.conf:
server {
listen 80;
server_name site1.com www.site1.com; # 绑定域名
root /var/www/html/site1.com; # 指向该站点的物理路径
index index.php index.html index.htm;
# 伪静态规则(必须,否则固定链接失效)
location / {
try_files $uri $uri/ /index.php?$args;
}
# PHP 处理
location ~ .php$ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock; # 根据实际 PHP 版本调整 sock 路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 安全限制,禁止访问隐藏文件和敏感文件
location ~ /.ht {
deny all;
}
}
同理,为 site2.com 创建 site2.conf,只需更改 server_name 和 root 路径。
最后重启 Nginx:systemctl restart nginx。
4. Apache 配置(如果你用的是 LAMP)
逻辑类似,使用 <VirtualHost> 标签:
<VirtualHost *:80>
ServerName site1.com
DocumentRoot /var/www/html/site1.com
<Directory /var/www/html/site1.com>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
方案二:Docker 容器化部署(现代、隔离性好)
如果你熟悉 Docker,这是目前最优雅的方案。每个 WordPress 实例运行在独立的容器中,互不干扰,迁移方便,回滚简单。
架构设计
通常我们会结合 Nginx Proxy Manager 或 Caddy 来做反向XX和 SSL 证书自动签发,后端挂载多个 WordPress 容器。
快速上手示例(docker-compose)
假设你要建两个站,可以写两个 docker-compose.yml 文件,或者在一个大文件中定义多个服务。这里以单文件为例:
version: '3'
services:
# 共享的 MySQL 数据库
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress_db
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpresspass
restart: always
# 站点 1
wp-site1:
image: wordpress:latest
depends_on:
- db
ports:
- "8081:80" # 内部端口映射,实际通过反向XX访问
volumes:
- ./site1/wp-content:/var/www/html/wp-content
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress_db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpresspass
restart: always
# 站点 2
wp-site2:
image: wordpress:latest
depends_on:
- db
volumes:
- ./site2/wp-content:/var/www/html/wp-content
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress_db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpresspass
restart: always
volumes:
db_data:
配合反向XX(如 Nginx Proxy Manager):
- 添加 Proxy Host
site1.com,目标地址填wp-site1,目标端口80。 - 添加 Proxy Host
site2.com,目标地址填wp-site2,目标端口80。 - 开启 SSL 证书(Let’s Encrypt)。
优点:
- 彻底隔离:PHP 版本、扩展可以针对不同站点定制(如果分开镜像构建)。
- 清理方便:删掉容器和卷即可彻底清除站点。
- 资源控制:可以在 docker-compose 中限制 CPU 和内存。
方案三:使用一体化控制面板(小白首选)
如果你不想碰命令行,也不想研究 Nginx 配置,国内云厂商(阿里云、腾讯云)的应用商店,或者第三方面板是最佳选择。
-
宝塔面板 (BT Panel):
- 安装后,点击“网站” -> “添加站点”。
- 输入域名,选择 PHP 版本,勾选“创建数据库”。
- 上传 WordPress 包并解压,将目录指向该站点。
- 一键导入数据库或直接在新 WP 后台安装。
- 优势:图形化界面,SSL 证书一键申请,PHP 扩展一键安装。
-
1Panel:
- 新一代开源面板,基于 Docker 封装。
- 同样提供“应用商店”,直接搜索 WordPress,输入域名,点击部署。
- 底层自动处理了 Nginx 反向XX和容器编排,非常适合想尝鲜 Docker 但不想手写 Compose 的用户。
关键注意事项与避坑指南
无论选哪种方案,以下几点决定了你网站的稳定性和安全性:
-
资源瓶颈监控:
- WordPress 是吃内存大户(尤其是 PHP-FPM 进程数)。如果一台 2核 4G 的服务器跑了 5 个站,并发稍高就会 OOM(内存溢出)。
- 对策:限制 PHP-FPM 的最大子进程数;开启 OPcache;使用 Redis 作为对象缓存(Object Cache),极大减轻数据库压力。
-
安全隔离:
- 不要共用同一个
wp-config.php中的密钥盐值(Salts),虽然 WordPress 每次安装会自动生成,但确保它们独立。 - 防火墙策略:只开放 80/443 端口。数据库端口(3306/5432)严禁对公网开放,仅允许本地(127.0.0.1)连接。
- 不要共用同一个
-
备份策略:
- 多站点意味着风险集中。一旦主数据库损坏,所有站点挂掉。
- 必须做备份:
- 数据库:每日自动备份到 OSS/S3 或本地其他磁盘。
- 文件:特别是
wp-content/uploads目录,数据都在这里。
- 推荐使用插件如 UpdraftPlus 进行远程备份,或者编写 Crontab 脚本打包压缩并上传至云存储。
-
SEO 与解析:
- 确保每个域名的 DNS 解析都正确指向你的服务器 IP。
- 在 WordPress 后台的“常规”设置中,务必将“WordPress 地址”和“站点地址”改为对应的域名,否则会出现重定向循环或图片加载失败。
-
HTTPS 强制跳转:
- 现在没有 HTTPS 的网站会被浏览器标记为“不安全”,严重影响用户体验和 SEO。
- 在 Nginx 配置中强制 HTTP 跳转到 HTTPS,或使用 Let’s Encrypt 免费证书。
总结建议
- 新手/非技术人员:直接用 宝塔面板 或 1Panel,省心省力,功能足够。
- 有运维基础/追求稳定性:采用 LNMP + Nginx 虚拟主机,性能最好,资源占用最低。
- 开发者/喜欢折腾/需要频繁迁移:采用 Docker + Compose,环境隔离干净,便于版本管理和测试。
根据你的服务器配置(CPU/内存)和团队技术能力,选择最适合的一条路即可。
云技术博客