努力
加油

如何在一台云服务器上搭建多个WordPress网站?

在一台云服务器上跑多个 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):

  1. 添加 Proxy Host site1.com,目标地址填 wp-site1,目标端口 80。
  2. 添加 Proxy Host site2.com,目标地址填 wp-site2,目标端口 80。
  3. 开启 SSL 证书(Let’s Encrypt)。

优点:

  • 彻底隔离:PHP 版本、扩展可以针对不同站点定制(如果分开镜像构建)。
  • 清理方便:删掉容器和卷即可彻底清除站点。
  • 资源控制:可以在 docker-compose 中限制 CPU 和内存。

方案三:使用一体化控制面板(小白首选)

如果你不想碰命令行,也不想研究 Nginx 配置,国内云厂商(阿里云、腾讯云)的应用商店,或者第三方面板是最佳选择。

  1. 宝塔面板 (BT Panel):

    • 安装后,点击“网站” -> “添加站点”。
    • 输入域名,选择 PHP 版本,勾选“创建数据库”。
    • 上传 WordPress 包并解压,将目录指向该站点。
    • 一键导入数据库或直接在新 WP 后台安装。
    • 优势:图形化界面,SSL 证书一键申请,PHP 扩展一键安装。
  2. 1Panel:

    • 新一代开源面板,基于 Docker 封装。
    • 同样提供“应用商店”,直接搜索 WordPress,输入域名,点击部署。
    • 底层自动处理了 Nginx 反向XX和容器编排,非常适合想尝鲜 Docker 但不想手写 Compose 的用户。

关键注意事项与避坑指南

无论选哪种方案,以下几点决定了你网站的稳定性和安全性:

  1. 资源瓶颈监控:

    • WordPress 是吃内存大户(尤其是 PHP-FPM 进程数)。如果一台 2核 4G 的服务器跑了 5 个站,并发稍高就会 OOM(内存溢出)。
    • 对策:限制 PHP-FPM 的最大子进程数;开启 OPcache;使用 Redis 作为对象缓存(Object Cache),极大减轻数据库压力。
  2. 安全隔离:

    • 不要共用同一个 wp-config.php 中的密钥盐值(Salts),虽然 WordPress 每次安装会自动生成,但确保它们独立。
    • 防火墙策略:只开放 80/443 端口。数据库端口(3306/5432)严禁对公网开放,仅允许本地(127.0.0.1)连接。
  3. 备份策略:

    • 多站点意味着风险集中。一旦主数据库损坏,所有站点挂掉。
    • 必须做备份:
      • 数据库:每日自动备份到 OSS/S3 或本地其他磁盘。
      • 文件:特别是 wp-content/uploads 目录,数据都在这里。
    • 推荐使用插件如 UpdraftPlus 进行远程备份,或者编写 Crontab 脚本打包压缩并上传至云存储。
  4. SEO 与解析:

    • 确保每个域名的 DNS 解析都正确指向你的服务器 IP。
    • 在 WordPress 后台的“常规”设置中,务必将“WordPress 地址”和“站点地址”改为对应的域名,否则会出现重定向循环或图片加载失败。
  5. HTTPS 强制跳转:

    • 现在没有 HTTPS 的网站会被浏览器标记为“不安全”,严重影响用户体验和 SEO。
    • 在 Nginx 配置中强制 HTTP 跳转到 HTTPS,或使用 Let’s Encrypt 免费证书。

总结建议

  • 新手/非技术人员:直接用 宝塔面板 或 1Panel,省心省力,功能足够。
  • 有运维基础/追求稳定性:采用 LNMP + Nginx 虚拟主机,性能最好,资源占用最低。
  • 开发者/喜欢折腾/需要频繁迁移:采用 Docker + Compose,环境隔离干净,便于版本管理和测试。

根据你的服务器配置(CPU/内存)和团队技术能力,选择最适合的一条路即可。