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

在单台云服务器上部署多个独立的 WordPress 站点,核心在于资源隔离与域名路由。对于个人开发者或小团队而言,最成熟、稳定且成本最低的方案是基于 Nginx + PHP-FPM + MySQL/MariaDB 的 LEMP 架构。

以下我将以国内主流云厂商(如阿里云、腾讯云)常见的 CentOS 7/8 或 Ubuntu 20.04/22.04 环境为例,提供一套标准化的实操方案。我们将采用“多站点独立目录 + Nginx Server Block”的方式,确保每个网站拥有独立的文件权限、SSL证书和日志,避免互相干扰。

一、 前期准备与环境初始化

假设你的服务器 IP 为 1.2.3.4,你拥有两个域名:site1.com 和 site2.com,均已解析到该 IP。

1. 安装基础组件

推荐使用包管理器安装,以保证后续自动更新和安全补丁。

# CentOS/RHEL 示例
sudo yum install -y nginx mariadb-server mariadb php-fpm php-mysqlnd php-json php-gd php-mbstring php-xml php-zip curl wget unzip

# Ubuntu/Debian 示例
sudo apt update
sudo apt install -y nginx mysql-server php-fpm php-mysql php-gd php-mbstring php-xml php-zip curl unzip

2. 启动并设置开机自启

sudo systemctl enable --now nginx mariadb php-fpm

3. 配置数据库

登录 MySQL 并为每个网站创建独立的用户和数据库,遵循最小权限原则。

mysql -u root -p

CREATE DATABASE site1_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'site1_user'@'localhost' IDENTIFIED BY 'StrongPassword1!';
GRANT ALL PRIVILEGES ON site1_db.* TO 'site1_user'@'localhost';

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

FLUSH PRIVILEGES;
EXIT;

二、 创建网站目录结构

为了便于管理,建议采用统一的目录规范。例如 /var/www/ 下按域名划分。

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

# 赋予当前用户(通常是 deployer 或 www-data)写入权限,避免使用 chmod 777
sudo chown -R $USER:$USER /var/www/site1.com/public_html
sudo chown -R $USER:$USER /var/www/site2.com/public_html

注意:在生产环境中,建议创建一个专门的非 root 用户来运行 PHP-FPM 进程,以提升安全性。但在快速搭建场景中,默认配置通常由 nginx 用户执行,需确保 Nginx 配置中的 user 指令正确。


三、 配置 Nginx Server Blocks

这是实现“多站点”的关键。我们需要为每个域名编写独立的 Nginx 配置文件。

1. 配置 site1.com

创建文件 /etc/nginx/conf.d/site1.conf(CentOS)或 /etc/nginx/sites-available/site1.com(Ubuntu)。

server {
    listen 80;
    server_name site1.com www.site1.com;
    root /var/www/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;

    # 基本安全头
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

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

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

    # 禁止访问隐藏文件和敏感文件
    location ~ /. {
        deny all;
    }

    location ~* /(wp-config.php|readme.html|license.txt) {
        deny all;
    }
}

2. 配置 site2.com

同理,创建 /etc/nginx/conf.d/site2.conf,修改 server_name, root, log 路径即可。

3. 测试并重载 Nginx

sudo nginx -t
sudo systemctl reload nginx

四、 部署 WordPress

1. 下载并解压

在每个网站的根目录下分别下载最新版的 WordPress。

cd /var/www/site1.com/public_html
wget https://wordpress.org/latest.tar.gz
tar xzvf latest.tar.gz
mv wordpress/* .
rm -rf wordpress latest.tar.gz

# 同样操作 site2
cd /var/www/site2.com/public_html
wget https://wordpress.org/latest.tar.gz
tar xzvf latest.tar.gz
mv wordpress/* .
rm -rf wordpress latest.tar.gz

2. 设置权限

确保 Nginx 用户(通常是 nginx 或 www-data)对 wp-content/uploads 等目录有写入权限。

# CentOS (Nginx user is usually 'nginx')
sudo chown -R nginx:nginx /var/www/site1.com/public_html
sudo find /var/www/site1.com/public_html -type d -exec chmod 755 {} ;
sudo find /var/www/site1.com/public_html -type f -exec chmod 644 {} ;

# Ubuntu (Nginx user is usually 'www-data')
sudo chown -R www-data:www-data /var/www/site1.com/public_html
# ... 类似 chmod 操作

3. 通过浏览器完成安装

访问 http://site1.com,按照提示输入之前创建的数据库信息(数据库名、用户名、密码),完成 WordPress 的安装向导。对 site2.com 重复此步骤。


五、 启用 HTTPS(关键步骤)

生产环境必须使用 HTTPS。推荐使用 Certbot 自动申请 Let’s Encrypt 免费证书。

1. 安装 Certbot

# CentOS
sudo yum install -y certbot python3-certbot-nginx

# Ubuntu
sudo apt install -y certbot python3-certbot-nginx

2. 获取证书

sudo certbot --nginx -d site1.com -d www.site1.com
sudo certbot --nginx -d site2.com -d www.site2.com

Certbot 会自动修改 Nginx 配置,将 80 端口重定向到 443,并插入 SSL 证书路径。请检查生成的配置文件是否正确。

3. 设置自动续期

Certbot 通常会配置好 systemd timer,你可以验证一下:

sudo systemctl list-timers | grep certbot

六、 性能优化与安全加固建议

  1. PHP-FPM 池隔离:
    如果流量较大,建议在 /etc/php-fpm.d/ 或 /etc/php/*/fpm/pool.d/ 中为不同网站创建独立的 pool,分配不同的 CPU 和内存限制,防止一个站点的恶意脚本耗尽整个服务器的 PHP 资源。

  2. 对象缓存:
    安装 Redis 或 Memcached,并在 WordPress 中配置插件(如 Redis Object Cache),显著提升数据库查询速度。

  3. 静态资源 CDN:
    将 wp-content/uploads 中的图片、JS、CSS 迁移至对象存储(如阿里云 OSS、腾讯云 COS)并通过 CDN 提速。这不仅提升加载速度,还能降低源站带宽压力。

  4. 定期备份:
    使用云厂商提供的快照功能,或编写 Shell 脚本定期备份数据库和 /var/www 目录到远程存储。没有备份的系统是不安全的。

  5. 防火墙配置:
    仅在云控制台的安全组中开放 80 (HTTP), 443 (HTTPS) 端口。MySQL (3306) 仅允许本地访问(127.0.0.1),切勿对外开放。

总结

通过以上步骤,你可以在一台服务器上低成本、高隔离性地运行多个 WordPress 站点。这种架构清晰、易于维护,且符合国内云服务商的最佳实践。关键在于:独立目录、独立数据库、独立 Nginx 配置、独立 SSL 证书。

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