加油
努力

如何在同一个服务器上搭建多个WordPress实例?

在同一个服务器上搭建多个 WordPress 实例是常见需求,比如用于管理多个网站或客户站点。以下是详细的步骤和最佳实践:


✅ 前提条件

确保你已经拥有:

  • 一台 Linux 服务器(如 Ubuntu/CentOS)
  • 已安装 LAMP 或 LEMP 环境(Apache/Nginx + MySQL/MariaDB + PHP)
  • 域名或子域名(可选,也可用不同端口或路径)

🧩 方法一:使用不同的虚拟主机(推荐)

每个 WordPress 实例运行在独立的目录中,并通过虚拟主机配置区分。

步骤 1:创建多个网站目录

sudo mkdir -p /var/www/site1
sudo mkdir -p /var/www/site2

步骤 2:下载 WordPress 到各个目录

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

# 复制到各个站点
sudo cp -r wordpress/* /var/www/site1/
sudo cp -r wordpress/* /var/www/site2/

# 设置权限
sudo chown -R www-data:www-data /var/www/site1
sudo chown -R www-data:www-data /var/www/site2
sudo chmod -R 755 /var/www

步骤 3:为每个站点创建独立的数据库

mysql -u root -p
CREATE DATABASE wp_site1;
CREATE DATABASE wp_site2;
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'strongpassword1';
CREATE USER 'user2'@'localhost' IDENTIFIED BY 'strongpassword2';
GRANT ALL PRIVILEGES ON wp_site1.* TO 'user1'@'localhost';
GRANT ALL PRIVILEGES ON wp_site2.* TO 'user2'@'localhost';
FLUSH PRIVILEGES;
EXIT;

步骤 4:配置 Web 服务器(以 Apache 为例)

创建虚拟主机配置文件:

sudo nano /etc/apache2/sites-available/site1.conf

内容如下:

<VirtualHost *:80>
    ServerName site1.example.com
    DocumentRoot /var/www/site1

    <Directory /var/www/site1>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/site1_error.log
    CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
</VirtualHost>

同样创建 site2.conf,修改 ServerNameDocumentRoot

启用站点:

sudo a2ensite site1.conf
sudo a2ensite site2.conf
sudo systemctl reload apache2

💡 若无域名,可在本地 hosts 文件中绑定测试域名,或使用 IP + 端口方式(见方法二)。


🧩 方法二:使用不同端口访问(适合开发/测试)

修改 Apache 监听端口(可选)

编辑 /etc/apache2/ports.conf

Listen 80
Listen 8080

创建第二个虚拟主机监听 8080:

sudo nano /etc/apache2/sites-available/site2-port.conf
<VirtualHost *:8080>
    ServerName localhost
    DocumentRoot /var/www/site2

    <Directory /var/www/site2>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

启用并重启:

sudo a2ensite site2-port.conf
sudo systemctl restart apache2

访问:

  • http://your-server-ip:80 → site1
  • http://your-server-ip:8080 → site2

🧩 方法三:使用子目录(单域名多实例)

例如:

  • example.com/blog1 → 第一个 WordPress
  • example.com/blog2 → 第二个 WordPress

配置步骤:

sudo mkdir /var/www/html/blog1
sudo mkdir /var/www/html/blog2

将 WordPress 文件复制进去,并分别配置数据库。

注意:

  • 每个子目录中的 wp-config.php 要正确设置数据库信息。
  • .htaccess 会自动处理,但需确保主站不冲突。

🔐 安全建议

  1. 独立数据库:避免共用数据库表前缀混淆。
  2. 不同 wp-config.php:确保数据库凭据隔离。
  3. 文件权限/var/www/... 所属 www-data,权限 644/755。
  4. 定期备份:每个站点单独备份数据库和文件。
  5. HTTPS:为每个站点配置 SSL(可用 Let’s Encrypt)。

🛠️ 管理技巧

  • 使用软链接简化更新:
    sudo ln -s /usr/share/wordpress /var/www/site1
  • 使用 Docker 可更轻松实现多实例隔离(进阶方案)。

✅ 总结

方法 适用场景 优点 缺点
不同虚拟主机(域名) 生产环境多网站 清晰、SEO友好 需要多个域名
不同端口 测试/内网 简单快速 不适合公网正式使用
子目录 单域名下多博客 统一品牌 URL 较长,管理略复杂

如有需要,我也可以提供 Nginx 的配置示例或自动化脚本模板。欢迎继续提问!

云服务器