努力
加油

配置一台服务器同时运行两个WordPress站点的步骤是什么?

在一台服务器上跑两个 WordPress 站点,核心思路就一个:复用资源,隔离环境。

别去搞什么复杂的虚拟机嵌套或者 Docker 容器化(除非你是重度运维玩家),对于大多数中小站长来说,最稳妥、性价比最高、维护成本最低的方案是:LNMP/LAMP 架构 + Nginx/Apache 虚拟主机配置 + 独立数据库用户。

下面我以目前主流且稳定的 Nginx + PHP-FPM + MySQL/MariaDB 环境为例,手把手梳理步骤。这套方案在阿里云、腾讯云等国内主流云厂商上都能完美运行。

第一步:基础环境搭建(如果服务器还是空的)

假设你有一台刚初始化的 CentOS 7/8 或 Ubuntu 20.04+ 云服务器。

  1. 安装 Nginx:负责接收 HTTP 请求,转发给 PHP。
  2. 安装 PHP-FPM:处理 PHP 代码。建议安装 php-fpm 以及必要的扩展(如 php-mysql, php-curl, php-gd, php-xml 等,WordPress 依赖这些)。
  3. 安装 MySQL/MariaDB:存储数据。

提示:你可以使用宝塔面板(BT Panel)一键安装 LNMP 环境,这是国内最省心的方式。如果你追求极致控制和了解原理,建议使用命令行手动编译或 YUM/APT 安装。以下流程基于“手动/半自动”逻辑,因为这才是技术博客该讲的东西。

第二步:创建独立的目录结构

不要把所有网站文件都扔在一个目录下。我们需要为每个站点建立独立的 Web 根目录。

# 创建第一个站点的目录
sudo mkdir -p /var/www/html/site1.com/public_html

# 创建第二个站点的目录
sudo mkdir -p /var/www/html/site2.com/public_html

# 赋予权限(以 www-data 为例,CentOS 通常是 nginx)
sudo chown -R nginx:nginx /var/www/html/site1.com
sudo chown -R nginx:nginx /var/www/html/site2.com

第三步:数据库与用户隔离(关键安全步骤)

绝对不要让两个站点共用同一个数据库管理员账号,甚至最好不要用同一个数据库名。

  1. 登录 MySQL:

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

    CREATE DATABASE site1_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    CREATE USER 'site1_user'@'localhost' IDENTIFIED BY 'strong_password_1';
    GRANT ALL PRIVILEGES ON site1_db.* TO 'site1_user'@'localhost';
    FLUSH PRIVILEGES;
  3. 为站点 2 创建数据库和用户:

    CREATE DATABASE site2_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    CREATE USER 'site2_user'@'localhost' IDENTIFIED BY 'strong_password_2';
    GRANT ALL PRIVILEGES ON site2_db.* TO 'site2_user'@'localhost';
    FLUSH PRIVILEGES;

为什么这么做? 如果其中一个站点被挂马(SQL 注入或 XSS 导致写入 shell),攻击者只能访问 site1_db,无法直接操作 site2_db,实现了逻辑隔离。

第四步:上传 WordPress 程序并解压

将下载好的 WordPress 压缩包分别放入对应的目录。

# 进入站点1目录
cd /var/www/html/site1.com/public_html
unzip wordpress.zip
rm wordpress.zip

# 进入站点2目录
cd /var/www/html/site2.com/public_html
unzip wordpress.zip
rm wordpress.zip

记得修改配置文件权限:

sudo cp wp-config-sample.php wp-config.php
sudo chown nginx:nginx * -R

第五步:配置 Nginx 虚拟主机(核心难点)

这是最关键的一步。你需要为每个域名编写独立的 Nginx 配置文件。

  1. 进入 Nginx 配置目录(通常是 /etc/nginx/conf.d/ 或 /etc/nginx/sites-available/)。
  2. 创建 site1.conf:
server {
    listen 80;
    server_name www.site1.com site1.com; # 替换为你的域名

    root /var/www/html/site1.com/public_html;
    index index.php index.html index.htm;

    access_log /var/log/nginx/site1.access.log;
    error_log /var/log/nginx/site1.error.log;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ .php$ {
        fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 路径根据实际 PHP 版本调整
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # 禁止访问隐藏文件
    location ~ /. {
        deny all;
    }
}
  1. 创建 site2.conf,结构与上面类似,但需修改:

    • server_name: 改为 www.site2.com site2.com
    • root: 改为 /var/www/html/site2.com/public_html
    • access_log 和 error_log 文件名区分开
    • fastcgi_pass 端口/Socket 保持一致(如果是同一 PHP-FPM 池)
  2. 测试配置并重载 Nginx:

    sudo nginx -t
    sudo systemctl reload nginx

第六步:前端部署与初始化

  1. 确保你的域名 DNS 解析已经指向了这台服务器的 IP 地址。
  2. 浏览器访问 site1.com,按照 WordPress 安装向导操作。
    • 数据库名称:site1_db
    • 用户名:site1_user
    • 密码:你设置的强密码
  3. 同样地,访问 site2.com 进行安装,使用 site2_db 和 site2_user。

第七步:性能优化与安全加固(进阶必做)

两台站跑在一起,资源竞争是必然的。如果不做限制,一个站流量暴增会把另一个站拖垮。

  1. PHP-FPM 进程管理:
    编辑 php-fpm.d/www.conf,设置合理的 pm.max_children。例如,如果内存有限,不要设太大,避免 OOM(内存溢出)。

  2. 静态资源缓存:
    强烈建议安装 Redis 或 Memcached,并在 WordPress 中安装对应插件(如 Redis Object Cache)。这能极大减轻数据库压力,两个站点共享这个缓存层,效率更高。

  3. HTTPS 证书:
    现在没有 SSL 的网站会被浏览器标记为“不安全”。推荐使用 Certbot 免费申请 Let’s Encrypt 证书,并为两个站点分别配置 HTTPS。

  4. 定期备份:
    写一个简单的 Shell 脚本,利用 mysqldump 备份两个数据库,并用 tar 打包 Web 目录,定时推送到 OSS/S3 或另一台机器。切记:备份是最后一道防线。

常见坑点提醒

  • 时区问题:检查 php.ini 中的 date.timezone,设置为 Asia/Shanghai,否则 WP 的时间显示会乱。
  • 文件权限:很多新手遇到“无法更新主题/插件”的问题,90% 是因为 Nginx 用户(nginx/www-data)对 wp-content/uploads 目录没有写入权限。确保所有文件属主是 Web 服务用户。
  • 内存不足:如果服务器只有 1G 或 2G 内存,跑两个 WP 会很吃力。务必开启 Swap 分区,或者考虑升级配置。监控 free -m 和 top 命令。

总结

在一台服务器上跑多站,本质上是多租户隔离。只要做到:

  1. Web 根目录隔离
  2. 数据库账号隔离
  3. Nginx 配置隔离
  4. 日志分离

就能实现稳定运行。这种方案成本低、灵活性高,非常适合个人开发者、小型工作室或初创项目。等到单站流量稳定过万 PV 以上,再考虑拆分到多台服务器也不迟。