在同一台云主机上部署多个WordPress站点,常见的有三种方案:基于子域名/多域名、基于目录、基于容器/虚拟化。以下是每种方案的详细配置步骤和注意事项。
方案一:基于子域名或多域名(推荐)
这是最常用的方式,通过Nginx/Apache的虚拟主机配置实现。
1. 环境准备
确保已安装:
- Web服务器:Nginx 或 Apache
- PHP(7.4+)
- MySQL/MariaDB 或每个站点独立数据库
- PHP-FPM(若用Nginx)
2. 目录结构
/var/www/
├── site1.example.com # 第一个站点
├── site2.example.com # 第二个站点
└── anothersite.com # 完全不同的域名
3. Nginx配置示例(多域名)
# 站点1:blog.example.com
server {
listen 80;
server_name blog.example.com;
root /var/www/blog.example.com;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ .php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
# 站点2:shop.example.com
server {
listen 80;
server_name shop.example.com;
root /var/www/shop.example.com;
# ... 类似配置
}
4. 数据库配置
为每个WordPress创建独立数据库和用户:
CREATE DATABASE wordpress_site1;
CREATE USER 'user_site1'@'localhost' IDENTIFIED BY '强密码';
GRANT ALL ON wordpress_site1.* TO 'user_site1'@'localhost';
5. 安装WordPress
- 分别下载WordPress到各目录
- 复制
wp-config-sample.php为wp-config.php - 修改数据库配置为对应数据库
- 通过浏览器访问域名完成安装
方案二:基于子目录
适用于同一域名下的不同路径,如:
example.com/blog1example.com/blog2
Nginx配置示例
server {
server_name example.com;
root /var/www/example.com;
# 主站点(可选)
location / {
# 主站点配置
}
# 子目录站点1
location ^~ /blog1 {
alias /var/www/example.com/blog1;
try_files $uri $uri/ /blog1/index.php?$args;
location ~ .php$ {
# PHP处理配置,注意路径转换
}
}
}
注意:WordPress后台需要设置站点地址为完整路径(如example.com/blog1)。
方案三:使用Docker容器(高隔离性)
适合需要环境隔离的场景。
1. 使用Docker Compose部署多站点
version: '3'
services:
wordpress-site1:
image: wordpress:php8.1-apache
container_name: wp-site1
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: site1_db
WORDPRESS_DB_USER: site1_user
WORDPRESS_DB_PASSWORD: password1
volumes:
- ./site1:/var/www/html
wordpress-site2:
image: wordpress:php8.1-apache
container_name: wp-site2
ports:
- "8081:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: site2_db
WORDPRESS_DB_USER: site2_user
WORDPRESS_DB_PASSWORD: password2
volumes:
- ./site2:/var/www/html
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root_password
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
2. 使用反向XX统一端口
通过Nginx将不同域名XX到不同容器:
server {
listen 80;
server_name site1.example.com;
location / {
proxy_pass http://localhost:8080;
}
}
server {
listen 80;
server_name site2.example.com;
location / {
proxy_pass http://localhost:8081;
}
}
通用注意事项
1. 资源限制
- 调整PHP-FPM进程数避免内存溢出
- 设置MySQL连接数限制
- 监控磁盘空间(特别是上传目录)
2. 安全配置
- 每个站点使用独立的数据库用户
- 限制文件权限(建议
755目录,644文件) - 定期更新WordPress核心、主题和插件
- 为每个站点配置SSL证书(可使用Let’s Encrypt)
3. 性能优化
- 启用对象缓存(Redis/Memcached)
- 使用缓存插件(W3 Total Cache、WP Super Cache)
- 配置CDN提速静态资源
4. 备份策略
- 分别备份各站点的
wp-content目录和数据库 - 考虑使用
wp-cli批量管理多个站点
快速检查清单
- [ ] 域名解析已指向服务器IP
- [ ] 服务器防火墙开放80/443端口
- [ ] 每个站点有独立的数据库和用户
- [ ] WordPress配置文件中的数据库信息正确
- [ ] 文件权限设置正确(Web用户可读写)
- [ ] 配置了适当的备份方案
推荐方案选择
- 初学者/少量站点:方案一(多域名虚拟主机)
- 同一域名下多个应用:方案二(子目录)
- 需要环境隔离/快速部署:方案三(Docker)
- 超多站点(10+):考虑使用管理面板(如aaPanel、CyberPanel)或专门的多站点管理工具
根据实际需求选择方案,并确保服务器资源(CPU、内存、磁盘)足够支撑所有站点的并发访问。
CLOUD技术笔记