如何在一台Linux服务器上同时运行两个WordPress站点?

在 Linux 服务器上同时运行两个 WordPress 站点,核心思路是资源隔离路由分发。根据服务器配置、运维习惯以及你对稳定性的要求,主要有三种主流方案。

以下从“最推荐(容器化)”到“传统方式”进行详细拆解,并附带关键配置要点。


方案一:Docker + Docker Compose(强烈推荐)

这是目前最主流、最干净、最容易迁移的方案。每个 WordPress 实例拥有独立的 PHP 版本、数据库和文件目录,互不干扰。

1. 架构设计

  • Web 层:Nginx 作为反向X_X,根据域名将请求转发给不同的内部服务。
  • 应用层:两个独立的 wordpress 容器(php-fpm)。
  • 数据层:两个独立的 mysqlmariadb 容器(或者共用一个 MySQL 容器但使用不同数据库名,建议独立以保安全)。

2. 实施步骤概要

第一步:安装 Docker 和 Docker Compose

# CentOS/RHEL
sudo yum install -y docker-ce docker-compose-plugin
sudo systemctl enable --now docker

# Ubuntu/Debian
sudo apt update
sudo apt install -y docker.io docker-compose-plugin
sudo systemctl enable --now docker

第二步:创建项目目录结构

/var/www/sites/
├── site1/
│   ├── Dockerfile
│   ├── docker-compose.yml
│   └── data/ (挂载点)
└── site2/
    ├── Dockerfile
    ├── docker-compose.yml
    └── data/ (挂载点)

第三步:编写 Site1 的 docker-compose.yml

version: '3.8'
services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root_password_site1
      MYSQL_DATABASE: wp_site1
      MYSQL_USER: wp_user
      MYSQL_PASSWORD: wp_pass_site1
    volumes:
      - ./data/db:/var/lib/mysql

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "8081:80" # 内部端口,仅通过 Nginx 访问,不建议直接暴露
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wp_user
      WORDPRESS_DB_PASSWORD: wp_pass_site1
      WORDPRESS_DB_NAME: wp_site1
    volumes:
      - ./data/wp-content:/var/www/html/wp-content

注:Site2 的配置类似,只需修改端口(如 8082)、数据库密码和挂载路径即可。

第四步:配置 Nginx 反向X_X(关键)

你需要安装 Nginx(可以是宿主机上的,也可以是另一个容器),配置文件 /etc/nginx/conf.d/sites.conf

server {
    listen 80;
    server_name www.site1.com site1.com;

    location / {
        proxy_pass http://127.0.0.1:8081; # 指向 Site1 的 Docker 内部端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

server {
    listen 80;
    server_name www.site2.com site2.com;

    location / {
        proxy_pass http://127.0.0.1:8082; # 指向 Site2 的 Docker 内部端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

优点

  • 隔离性好:PHP 版本可不同(如 Site1 用 PHP 7.4,Site2 用 PHP 8.2)。
  • 清理方便:删除文件夹即可彻底移除站点。
  • 环境一致:开发测试生产环境统一。

方案二:LNMP/LAMP 多虚拟主机(传统物理部署)

如果你不想学习 Docker,或者服务器资源极其有限(如 1核512M),可以使用传统的 Nginx/Apache + PHP-FPM 多进程模式。

1. 核心逻辑

  • PHP-FPM:为每个站点启动一个独立的 PHP-FPM pool。
  • Nginx:配置多个 server block,分别指向不同的 PHP-FPM socket 或端口。

2. 实施步骤概要

第一步:安装基础环境

# 以 CentOS 为例
yum install nginx php-fpm mariadb-server

第二步:配置 PHP-FPM 多 Pool

编辑 /etc/php-fpm.d/ 下的配置文件,或者新建 site1.confsite2.conf

/etc/php-fpm.d/site1.conf:

[site1]
user = nginx
group = nginx
listen = /run/php-fpm/site1.sock
pm = dynamic
pm.max_children = 5
...

/etc/php-fpm.d/site2.conf:

[site2]
user = nginx
group = nginx
listen = /run/php-fpm/site2.sock
pm = dynamic
pm.max_children = 5
...

重启 PHP-FPM:

systemctl restart php-fpm

第三步:配置 Nginx 虚拟主机

/etc/nginx/conf.d/site1.conf:

server {
    listen 80;
    server_name www.site1.com;
    root /var/www/site1/public_html;
    index index.php index.html;

    location ~ .php$ {
        fastcgi_pass unix:/run/php-fpm/site1.sock; # 关键:指向特定的 sock
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

同理配置 site2.conf,指向 /run/php-fpm/site2.sock/var/www/site2/

优点

  • 无虚拟化开销,性能略高(微乎其微)。
  • 适合老旧系统或无法安装 Docker 的环境。

缺点

  • 配置繁琐,容易配错权限。
  • 依赖关系复杂,升级 PHP 版本时可能影响所有站点。

方案三:WordPress Multisite(单站点多网络)

如果你的两个站点内容高度相关(如同一个公司的不同部门站,或同一个品牌的不同语言站),可以考虑启用 WP 的多站点功能(Multisite)。

1. 原理

在一个 WordPress 代码库下,通过子域名(site1.example.com, site2.example.com)或子目录(example.com/site1, example.com/site2)来区分不同站点。它们共享同一个数据库(不同表前缀)和同一套文件。

2. 实施前提

  • 需要在 wp-config.php 中开启:define('WP_ALLOW_MULTISITE', true);
  • 需要 Nginx 重写规则支持子域名映射。

3. 适用场景

  • 站点间插件/主题完全通用。
  • 管理员希望统一管理后台。

4. 不适用场景

  • 两个站点业务无关(如一个是博客,一个是电商)。
  • 需要不同的 PHP 版本或数据库版本。
  • 担心一个站点被攻击导致整个网络瘫痪。

关键注意事项(避坑指南)

  1. SSL/TLS 证书

    • 如果使用 Nginx 反代,确保为每个域名申请了 SSL 证书(Let’s Encrypt 免费且易用)。
    • 在 Nginx 配置中正确引用证书路径,并强制 HTTPS。
  2. 固定 URL 设置

    • 在 WordPress 后台 -> 设置 -> 常规中,务必将“WordPress 地址”和“站点地址”设置为正确的域名(http/https)。
    • 如果是 Docker 方案,注意容器内的 WORDPRESS_URL 环境变量是否设置正确,否则图片链接可能出错。
  3. 资源限制

    • 两个站点同时运行会消耗双倍 CPU 和内存。
    • 监控服务器负载(htop, free -m)。如果内存不足(<2GB),建议至少分配 Swap 分区,或限制 PHP-FPM/Docker 的最大子进程数。
  4. 备份策略

    • 数据库:定期 mysqldump 导出 SQL 文件。
    • 文件:特别是 wp-content/uploads 目录,必须备份。
    • 建议使用脚本自动备份到对象存储(如阿里云 OSS、腾讯云 COS)。
  5. 安全性

    • 不要直接使用 root 用户运行 PHP 或 Web 服务。
    • 限制数据库远程访问,只允许本地连接(localhost 或 127.0.0.1)。
    • 防火墙只开放 80/443 端口。

总结建议

  • 新手/追求稳定/易维护:选 方案一(Docker)。虽然初期学习成本稍高,但长期来看省心无数倍。
  • 老手/极简主义/低配机器:选 方案二(LNMP 多 Pool)
  • 同品牌/强关联站点:选 方案三(Multisite)

对于大多数国内云服务器用户,Docker 方案是目前生态最成熟、文档最多、问题最容易排查的选择。

未经允许不得转载:CLOUD云枢 » 如何在一台Linux服务器上同时运行两个WordPress站点?