努力
加油

多个WordPress网站共用一台服务器需要怎么配置?

多个 WordPress 站点共用一台服务器,核心思路就是“一个 Nginx/Apache + 多个独立目录 + 多域名解析”。

在国内云厂商(阿里云、腾讯云等)环境下,最稳妥、性能最好且维护成本最低的方案是:LNMP 环境(Linux + Nginx + MySQL/MariaDB + PHP-FPM)。

以下是基于生产环境标准的配置流程,不整虚的,直接上干货。


一、 前置准备

  1. 服务器系统:推荐 CentOS 7/8 或 Ubuntu 20.04/22.04 LTS。
  2. 域名解析:确保所有要绑定的域名都已 A 记录指向该服务器 IP。
  3. SSL 证书:强烈建议每个站点都配置 HTTPS。可以使用 Let’s Encrypt (certbot) 免费获取,或者在云厂商控制台申请免费证书。

二、 目录结构设计

不要把所有网站文件扔在一个文件夹里,要按站点隔离。

/var/www/
├── site1.com/       # 第一个站点根目录
│   ├── wp-content/
│   ├── index.php
│   └── ...
├── site2.net/       # 第二个站点根目录
│   ├── wp-content/
│   ├── index.php
│   └── ...
└── logs/            # 可选,存放访问日志
    ├── site1.access.log
    └── site2.access.log

权限设置关键一步:
Nginx 运行用户通常是 www-data (Ubuntu) 或 nginx (CentOS)。WordPress 需要写入 wp-content/uploads 和缓存文件。

# 以 Ubuntu 为例
sudo chown -R www-data:www-data /var/www/site1.com
sudo chmod -R 755 /var/www/site1.com

三、 Nginx 虚拟主机配置(核心)

这是实现“多站共存”的关键。每个站点需要一个独立的 .conf 配置文件。

1. 创建站点配置文件

在 /etc/nginx/sites-available/ 下为每个站点创建文件,例如 site1.com.conf:

server {
    listen 80;
    listen [::]:80;
    server_name site1.com www.site1.com;
    root /var/www/site1.com;
    index index.php index.html index.htm;

    # 错误日志
    error_log /var/log/nginx/site1.error.log;
    access_log /var/log/nginx/site1.access.log;

    # WordPress 伪静态规则(必须)
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # PHP 处理
    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        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;
    }

    # 静态资源缓存优化
    location ~* .(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
}

2. 启用站点并测试

# 软链接到 sites-enabled
sudo ln -s /etc/nginx/sites-available/site1.com.conf /etc/nginx/sites-enabled/site1.com.conf

# 测试配置语法
sudo nginx -t

# 重启 Nginx
sudo systemctl restart nginx

对 site2.net 重复上述步骤,只需修改 server_name、root 路径和日志文件名即可。Nginx 的性能优势在于它可以通过一个进程处理成千上万个并发连接,多站点共享一个 Nginx 实例毫无压力。


四、 数据库配置(MySQL/MariaDB)

原则:每个站点使用独立的数据库用户,严禁共用同一个数据库账号。

  1. 登录 MySQL:

    mysql -u root -p
  2. 为每个站点创建数据库和用户:

    -- 为 site1 创建库和用户
    CREATE DATABASE site1_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    CREATE USER 'site1_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
    GRANT ALL PRIVILEGES ON site1_db.* TO 'site1_user'@'localhost';
    FLUSH PRIVILEGES;
    
    -- 为 site2 创建库和用户
    CREATE DATABASE site2_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    CREATE USER 'site2_user'@'localhost' IDENTIFIED BY 'AnotherStrongPass!';
    GRANT ALL PRIVILEGES ON site2_db.* TO 'site2_user'@'localhost';
    FLUSH PRIVILEGES;
  3. 安装 WordPress 时填写对应信息:

    • Site1 填 site1_db, site1_user, StrongPassword123!
    • Site2 填 site2_db, site2_user, AnotherStrongPass!

这样即使一个站点被黑,也不会直接影响其他站点的数据库数据。


五、 PHP-FPM 配置优化

多个站点共用 PHP-FPM 时,需要注意内存管理。

  1. 检查 PHP-FPM 池配置:
    默认情况下,所有站点共用一个 PHP-FPM 池(通常位于 /etc/php/8.1/fpm/pool.d/www.conf)。

  2. 是否要拆分池?

    • 小流量站点:共用一个池没问题,节省资源。
    • 大流量/高负载站点:建议为高流量站点单独创建一个 PHP-FPM 池,防止某个站点突发流量拖垮整个服务器的 PHP 处理能力。

    示例:为 site1 单独建池
    复制 www.conf 为 site1.conf,修改 [pool] 名称为 site1,监听 socket 改为 /run/php/php8.1-site1.sock,并在 Nginx 配置中指向新的 socket。

  3. 关键参数调优:
    在 www.conf 中关注以下参数,根据服务器内存调整:

    • pm.max_children: 最大子进程数。公式参考:总内存 / (每个 PHP 进程占用内存)。一般 1G 内存服务器设 20-30 个足够。
    • pm.start_servers: 启动时初始进程数。
    • memory_limit: 单个 PHP 脚本最大内存(默认 128M 或 256M),WordPress 插件多的话建议调到 256M。

六、 安全与性能加固(国内环境必看)

  1. 防火墙策略:
    只开放必要端口:80, 443, 22 (SSH)。如果不用 FTP,关闭 21。

    # Ubuntu UFW 示例
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw allow 22/tcp
    sudo ufw enable
  2. 防暴力破解:
    安装 fail2ban,监控 SSH 和 Nginx 登录失败记录,自动封禁 IP。

  3. WAF(Web 应用防火墙):

    • 低成本方案:使用云厂商提供的轻量级 WAF 或 CDN 提速服务(如阿里云 WAF、腾讯云 CDN+WAF)。将域名接入 CDN,源站只允许 CDN IP 访问,能过滤掉 90% 以上的恶意扫描和 CC 攻击。
    • 自建方案:安装 ModSecurity + OWASP Core Rule Set,但配置复杂,容易误杀,新手慎用。
  4. 定期备份:

    • 代码:Git 仓库管理,或定时打包 /var/www 目录。
    • 数据库:使用 mysqldump 定时备份,上传到 OSS/S3/又拍云等对象存储。
    • 工具推荐:宝塔面板(如果追求运维效率)、Duplicator 插件(手动备份迁移)。
  5. 禁用 XML-RPC:
    在 Nginx 配置中添加:

    location = /xmlrpc.php {
        deny all;
        access_log off;
        log_not_found off;
    }

    这是防止 DDoS 攻击的常见手段。


七、 常见问题排查

  1. 502 Bad Gateway:

    • 检查 PHP-FPM 是否运行:systemctl status php8.1-fpm
    • 检查 Nginx 配置的 PHP socket 路径是否正确。
    • 检查磁盘空间是否已满。
  2. 403 Forbidden:

    • 最常见原因:文件权限不对。确保 Web 用户(www-data/nginx)有读取权限,目录可执行权限。
    • SELinux 开启导致:尝试临时关闭 SELinux 测试,或正确设置上下文。
  3. 页面样式错乱:

    • 检查数据库中 siteurl 和 home 字段是否与当前域名一致。
    • 检查 Nginx 是否开启了 Gzip 压缩,有时压缩算法冲突会导致 CSS/JS 损坏。

总结

多站同服的核心是:Nginx 做反向XX区分域名,MySQL 做数据库隔离,PHP-FPM 合理分配资源。

对于国内用户,强烈建议在服务器前加一层 CDN(如 Cloudflare、阿里云 CDN)。这不仅提升访问速度,还能隐藏源站 IP,大幅降低直接攻击风险,同时节省服务器带宽成本。

如果你的站点数量超过 5-10 个,或者单个站点流量较大,建议考虑容器化部署(Docker),用 Docker Compose 管理每个 WordPress 实例,隔离性更好,迁移更方便。