如何在同一个服务器上搭建两个独立的WordPress站点?

在单台服务器上部署两个独立的 WordPress 站点,核心思路是“多站点共存”。这通常通过 Web 服务器(如 Nginx 或 Apache)配置虚拟主机(Virtual Host),结合不同的域名解析和数据库实例来实现。

以下是基于主流 Linux 环境(CentOS/Ubuntu)+ Nginx + MySQL/MariaDB + PHP-FPM 的标准生产级方案。该方案强调隔离性、安全性和可维护性。


一、整体架构设计

  1. 操作系统:Linux(推荐 CentOS 7+/Alibaba Cloud Linux 2/3 或 Ubuntu 20.04+)
  2. Web 服务器:Nginx(高性能、低资源占用)
  3. 后端语言:PHP 8.0+(通过 PHP-FPM 运行)
  4. 数据库:MySQL 8.0 或 MariaDB 10.5+
  5. 站点结构:
    • 站点 A:www.site-a.com → 独立目录 /var/www/site-a
    • 站点 B:www.site-b.com → 独立目录 /var/www/site-b
    • 每个站点拥有独立的数据库用户、独立的 Nginx 配置文件

✅ 优势:权限隔离、故障互不影响、便于单独备份和维护。


二、前置准备

1. 更新系统并安装基础工具

# CentOS/RHEL
sudo yum update -y
sudo yum install epel-release -y
sudo yum install nginx mariadb-server php-fpm php-mysqlnd git curl wget unzip -y

# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y
sudo apt install nginx mariadb-server php-fpm php-mysql git curl wget unzip -y

2. 启动服务并设置开机自启

sudo systemctl enable --now nginx mariadb php-fpm

三、数据库配置(为两个站点创建独立数据库和用户)

登录 MySQL:

sudo mysql -u root -p

执行以下 SQL 语句:

-- 创建站点A的数据库和用户
CREATE DATABASE site_a_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'site_a_user'@'localhost' IDENTIFIED BY 'StrongPassword_A!';
GRANT ALL PRIVILEGES ON site_a_db.* TO 'site_a_user'@'localhost';
FLUSH PRIVILEGES;

-- 创建站点B的数据库和用户
CREATE DATABASE site_b_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'site_b_user'@'localhost' IDENTIFIED BY 'StrongPassword_B!';
GRANT ALL PRIVILEGES ON site_b_db.* TO 'site_b_user'@'localhost';
FLUSH PRIVILEGES;

EXIT;

⚠️ 安全提示:使用强密码,避免使用 'root'@'%' 这种远程访问权限。


四、下载并解压 WordPress

1. 创建网站根目录

sudo mkdir -p /var/www/site-a /var/www/site-b

2. 下载 WordPress

cd /tmp
wget https://wordpress.org/latest.tar.gz
tar xzf latest.tar.gz

3. 复制至对应目录

sudo cp -r wordpress/* /var/www/site-a/
sudo cp -r wordpress/* /var/www/site-b/

4. 设置正确权限(关键!)

# 所有者设为 nginx 用户(CentOS 中为 nginx,Ubuntu 中为 www-data)
sudo chown -R nginx:nginx /var/www/site-a /var/www/site-b

# 设置目录权限为 755,文件为 644
find /var/www/site-a -type d -exec chmod 755 {} ;
find /var/www/site-a -type f -exec chmod 644 {} ;
find /var/www/site-b -type d -exec chmod 755 {} ;
find /var/www/site-b -type f -exec chmod 644 {} ;

📌 注意:WordPress 需要写入 wp-content/uploads 等目录,若后续出现权限问题,可临时赋予 uploads 目录写权限,但生产环境建议使用 SELinux/AppArmor 配合策略管理。


五、配置 Nginx 虚拟主机

1. 创建站点 A 的配置

sudo nano /etc/nginx/conf.d/site-a.conf

内容如下:

server {
    listen 80;
    server_name www.site-a.com site-a.com;

    root /var/www/site-a;
    index index.php index.html;

    # 日志
    access_log /var/log/nginx/site-a-access.log;
    error_log /var/log/nginx/site-a-error.log;

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

    # PHP 处理
    location ~ .php$ {
        fastcgi_pass unix:/run/php-fpm/www.sock;  # CentOS 路径可能不同
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # 禁止访问隐藏文件和 wp-config.php
    location ~ /. {
        deny all;
    }

    location = /wp-config.php {
        deny all;
    }

    # WordPress 固定链接支持
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
}

2. 创建站点 B 的配置

sudo nano /etc/nginx/conf.d/site-b.conf

内容与上面类似,仅修改:

  • server_name → www.site-b.com site-b.com
  • root → /var/www/site-b
  • access_log / error_log → 指向各自的日志文件

3. 测试并重载 Nginx

sudo nginx -t
sudo systemctl reload nginx

六、完成 WordPress 安装

  1. 确保你的域名已解析到服务器 IP(或通过本地 hosts 测试)。
  2. 浏览器访问 http://www.site-a.com,开始图形化安装:
    • 输入数据库名:site_a_db
    • 用户名:site_a_user
    • 密码:你设置的强密码
    • 数据库主机:localhost
  3. 对站点 B 重复上述步骤,使用 site_b_db 和 site_b_user。

七、增强安全性与性能优化(可选但推荐)

1. 启用 HTTPS(Let’s Encrypt)

使用 Certbot 自动申请 SSL 证书:

sudo yum install certbot python3-certbot-nginx  # CentOS
sudo apt install certbot python3-certbot-nginx  # Ubuntu

sudo certbot --nginx -d www.site-a.com -d site-a.com
sudo certbot --nginx -d www.site-b.com -d site-b.com

Certbot 会自动修改 Nginx 配置并重载。

2. 限制 PHP 执行权限

编辑 /etc/php-fpm.d/www.conf(或 /etc/php/8.0/fpm/pool.d/www.conf):

security.limit_extensions = .php
disable_functions = passthru, exec, system, shell_exec, proc_open, popen

重启 PHP-FPM:

sudo systemctl restart php-fpm

3. 防火墙开放端口

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

八、常见问题排查

问题 可能原因 解决方案
502 Bad Gateway PHP-FPM 未运行或 socket 路径错误 检查 systemctl status php-fpm;确认 Nginx 中 fastcgi_pass 路径正确
权限拒绝(Permission Denied) 文件所有者不是 nginx 用户 重新执行 chown -R nginx:nginx /var/www/...
固定链接失效 Nginx 未启用 try_files 检查 Nginx 配置中的 location / 块是否包含 try_files $uri $uri/ /index.php?$args;
数据库连接失败 密码错误或用户无权限 登录 MySQL 检查 SHOW GRANTS FOR 'user'@'localhost';

九、扩展建议

  • 容器化部署:若追求更高隔离性和迁移能力,推荐使用 Docker Compose 为每个站点创建独立容器(Nginx + PHP-FPM + MySQL),实现真正的环境隔离。
  • 反向X_X + CDN:上线后可接入阿里云 CDN 或腾讯云 CDN 提速静态资源,并隐藏源站 IP。
  • 监控与备份:配置定时任务(cron)自动备份数据库和文件目录,或使用宝塔面板、aaPanel 等可视化工具简化运维(适合非资深开发者)。

✅ 总结:在单台服务器上运行多个 WordPress 站点是完全可行且常见的做法。关键在于网络层隔离(Nginx vhost)、数据层隔离(独立数据库)、文件系统隔离(独立目录)。只要遵循最小权限原则和规范配置,即可稳定运行。

未经允许不得转载:CLOUD云枢 » 如何在同一个服务器上搭建两个独立的WordPress站点?