在同一台云主机上部署多个WordPress需要怎么配置?

在同一台云主机上部署多个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

  1. 分别下载WordPress到各目录
  2. 复制wp-config-sample.phpwp-config.php
  3. 修改数据库配置为对应数据库
  4. 通过浏览器访问域名完成安装

方案二:基于子目录

适用于同一域名下的不同路径,如:

  • example.com/blog1
  • example.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、内存、磁盘)足够支撑所有站点的并发访问。

云服务器