加油
努力

在CentOS或Ubuntu系统上如何隔离两个WordPress站点?

在 CentOS 或 Ubuntu 系统上隔离两个 WordPress 站点,是为了提高安全性、避免相互影响(如插件冲突、文件权限问题等),并便于独立管理。以下是几种常见的隔离方式:


✅ 推荐的隔离方法

方法一:使用不同的用户和目录(基础隔离)

1. 创建独立系统用户

# 在 Ubuntu/CentOS 上创建两个用户
sudo adduser wp-site1
sudo adduser wp-site2

2. 为每个站点创建独立的网站目录

sudo mkdir -p /var/www/site1.example.com
sudo mkdir -p /var/www/site2.example.com

# 更改属主
sudo chown wp-site1:wp-site1 /var/www/site1.example.com
sudo chown wp-site2:wp-site2 /var/www/site2.example.com

3. 分别安装 WordPress

下载 WordPress 到各自目录:

# 下载到 site1
sudo -u wp-site1 wget https://wordpress.org/latest.tar.gz -O /tmp/wordpress1.tar.gz
sudo -u wp-site1 tar -xzf /tmp/wordpress1.tar.gz -C /var/www/site1.example.com --strip-components=1

# 同样操作 site2
sudo -u wp-site2 wget https://wordpress.org/latest.tar.gz -O /tmp/wordpress2.tar.gz
sudo -u wp-site2 tar -xzf /tmp/wordpress2.tar.gz -C /var/www/site2.example.com --strip-components=1

4. 配置独立数据库

CREATE DATABASE wp_site1;
CREATE DATABASE wp_site2;
CREATE USER 'wp_user1'@'localhost' IDENTIFIED BY 'strongpassword1';
CREATE USER 'wp_user2'@'localhost' IDENTIFIED BY 'strongpassword2';
GRANT ALL PRIVILEGES ON wp_site1.* TO 'wp_user1'@'localhost';
GRANT ALL PRIVILEGES ON wp_site2.* TO 'wp_user2'@'localhost';
FLUSH PRIVILEGES;

5. 配置 Web 服务器(以 Nginx 为例)

site1 配置:

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

    location ~ .php$ {
        fastcgi_pass unix:/run/php/php8.1-fpm-site1.sock;  # 使用不同 PHP-FPM socket
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

site2 配置:

server {
    listen 80;
    server_name site2.example.com;
    root /var/www/site2.example.com;
    index index.php;

    location ~ .php$ {
        fastcgi_pass unix:/run/php/php8.1-fpm-site2.sock;
        ...
    }
}

6. 配置独立的 PHP-FPM 池(关键!)

编辑 /etc/php/8.1/fpm/pool.d/site1.conf

[site1]
user = wp-site1
group = wp-site1
listen = /run/php/php8.1-fpm-site1.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_value[open_basedir] = /var/www/site1.example.com:/tmp

同样创建 site2.conf,使用 wp-site2 用户和不同 socket。

重启 PHP-FPM 和 Nginx:

sudo systemctl restart php8.1-fpm
sudo systemctl reload nginx

方法二:使用 Docker 容器(推荐用于高级用户)

每个 WordPress 站点运行在独立容器中,实现完全隔离。

# docker-compose.yml
version: '3.8'
services:
  db1:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: wordpress1
      MYSQL_USER: wp1
      MYSQL_PASSWORD: wp1pass
    volumes:
      - db1_data:/var/lib/mysql

  wordpress1:
    image: wordpress:latest
    depends_on:
      - db1
    environment:
      WORDPRESS_DB_HOST: db1:3306
      WORDPRESS_DB_USER: wp1
      WORDPRESS_DB_PASSWORD: wp1pass
      WORDPRESS_DB_NAME: wordpress1
    ports:
      - "8080:80"
    volumes:
      - wp1_data:/var/www/html

  db2:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: wordpress2
      MYSQL_USER: wp2
      MYSQL_PASSWORD: wp2pass
    volumes:
      - db2_data:/var/lib/mysql

  wordpress2:
    image: wordpress:latest
    depends_on:
      - db2
    environment:
      WORDPRESS_DB_HOST: db2:3306
      WORDPRESS_DB_USER: wp2
      WORDPRESS_DB_PASSWORD: wp2pass
      WORDPRESS_DB_NAME: wordpress2
    ports:
      - "8081:80"
    volumes:
      - wp2_data:/var/www/html

volumes:
  db1_data:
  db2_data:
  wp1_data:
  wp2_data:

启动:

docker-compose up -d

优点:进程、网络、文件系统完全隔离,易于备份和迁移。


方法三:使用 LXC/LXD 容器(轻量级虚拟化)

适用于需要更高安全性和资源控制的场景。

# 安装 LXD
sudo snap install lxd
sudo lxd init

# 创建两个容器
lxc launch ubuntu:22.04 site1
lxc launch ubuntu:22.04 site2

# 分别进入容器安装 WordPress
lxc exec site1 bash
lxc exec site2 bash

每个容器拥有独立操作系统环境,完全隔离。


🔐 安全建议

  • 为每个站点配置独立的数据库用户。
  • 使用 open_basedir 限制 PHP 文件访问范围。
  • 禁用危险函数(如 exec, system)。
  • 定期更新 WordPress 核心、主题和插件。
  • 使用防火墙(如 ufw)限制不必要的端口。

✅ 总结

隔离方式 难度 隔离程度 适用场景
不同用户 + PHP-FPM 池 中等 生产环境推荐
Docker 容器 中等 极高 开发/生产通用
LXC 容器 较高 极高 多租户、高安全需求
同一用户同一环境 简单 不推荐

🟢 推荐方案
对于大多数情况,使用独立用户 + 独立 PHP-FPM 池 + 独立数据库 是最佳平衡点。
若追求极致隔离和可维护性,推荐使用 Docker

如需具体脚本或配置文件模板,我可以进一步提供。

云服务器