在Ubuntu服务器上部署WordPress多站点网络,可以让一个WordPress内核同时驱动多个独立站点,超级管理员统一维护主题、插件和核心升级。多站点模式有子域名和子目录两种形态,本文以Ubuntu 22.04、Nginx、MariaDB和PHP-FPM为例,走通环境搭建、多站点开启、服务器重写和常见问题处理。

开始前需要准备一台具有root权限的Ubuntu服务器,并将域名解析到服务器公网IP。若准备使用子域名模式,还需要在DNS服务商处添加一条通配符A记录,主机记录为 *.ipipp.com,指向服务器IP。若使用子目录模式,则只需主域名解析即可。下文中的示例域名均以 ipipp.com 代替,实际操作时替换为自己的域名。
安装Nginx、MariaDB和PHP-FPM
首先更新软件源并安装所需组件。Nginx负责接收HTTP请求并转发给PHP-FPM处理,MariaDB用于存放WordPress数据库。PHP需要安装MySQL扩展、图像处理、多字节字符串等模块,否则部分插件或站点功能会报错。
sudo apt update && sudo apt upgrade -y sudo apt install nginx mariadb-server php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-zip php-intl php-imagick -y
安装完成后启动服务并设置开机自启。不同Ubuntu版本的PHP-FPM服务名可能不同,Ubuntu 22.04默认使用 php8.1-fpm,Ubuntu 24.04则可能是 php8.3-fpm,可以通过 php -v 查看版本后调整服务名。
sudo systemctl enable nginx mariadb php8.1-fpm sudo systemctl start nginx mariadb php8.1-fpm php -v
接着创建数据库和独立数据库用户。WordPress多站点虽然共用一套程序,但每个子站点在数据库中会生成独立的数据表,因此数据库用户的权限需要覆盖整个数据库,不能只授予单表权限。
sudo mysql CREATE DATABASE wp_multisite DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'wpms_user'@'localhost' IDENTIFIED BY 'StrongPassword'; GRANT ALL PRIVILEGES ON wp_multisite.* TO 'wpms_user'@'localhost'; FLUSH PRIVILEGES; EXIT;
下载WordPress并启用多站点网络
从官方源下载WordPress压缩包并解压到站点目录。目录名建议使用域名,便于后续管理多个虚拟主机。解压后需要把文件属主改为 www-data,否则WordPress无法写入上传目录和配置文件。
cd /var/www sudo wget https://wordpress.org/latest.tar.gz sudo tar -xzf latest.tar.gz sudo mv wordpress ipipp.com sudo chown -R www-data:www-data /var/www/ipipp.com
复制配置文件模板并修改数据库连接信息。这里暂时不需要手工填写密钥盐值,安装向导会在首次访问时自动生成并写入。需要做的是在文件中加入一行定义,让WordPress后台出现多站点网络配置入口。
<?php define( 'DB_NAME', 'wp_multisite' ); define( 'DB_USER', 'wpms_user' ); define( 'DB_PASSWORD', 'StrongPassword' ); define( 'DB_HOST', 'localhost' ); define( 'DB_CHARSET', 'utf8mb4' ); define( 'AUTH_KEY', 'put your unique phrase here' ); define( 'SECURE_AUTH_KEY', 'put your unique phrase here' ); define( 'LOGGED_IN_KEY', 'put your unique phrase here' ); define( 'NONCE_KEY', 'put your unique phrase here' ); define( 'AUTH_SALT', 'put your unique phrase here' ); define( 'SECURE_AUTH_SALT', 'put your unique phrase here' ); define( 'LOGGED_IN_SALT', 'put your unique phrase here' ); define( 'NONCE_SALT', 'put your unique phrase here' ); define( 'WP_ALLOW_MULTISITE', true );
完成上述修改后,通过浏览器访问域名并完成单站点安装流程。登录后台,在「工具」菜单中会多出「网络设置」选项。点击后需要选择子域名或子目录模式。子域名模式扩展性强,但依赖泛域名解析;子目录模式无需额外DNS配置,适合在已有主站点下扩展。选择后WordPress会生成两段配置代码,分别用于 wp-config.php 和Nginx服务器块。
将生成的配置代码写入 wp-config.php 时,建议放在 WP_ALLOW_MULTISITE 定义之前。这段代码包含 MULTISITE、SUBDOMAIN_INSTALL、DOMAIN_CURRENT_SITE 等常量,它们决定当前网络的身份和运行方式。如果手动添加后发现后台一直提示网络未启用,通常是这段常量位置写错或缺少 define( 'MULTISITE', true ) 导致。
配置Nginx多站点重写规则
Apache环境下WordPress多站点可以依赖 .htaccess 实现重写,但Nginx必须把规则写入虚拟主机配置。下面的配置适用于子域名模式,核心是 try_files 指令将不存在的文件请求转发给 index.php 处理,同时保留查询参数,确保固定链接和站点子路径能够正常解析。
server {
listen 80;
server_name ipipp.com *.ipipp.com;
root /var/www/ipipp.com;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires max;
log_not_found off;
access_log off;
}
}
创建软链接启用站点,然后测试Nginx配置语法并重载服务。如果语法检查失败,多数是因为PHP-FPM版本与sock路径不匹配,或者缺少 snippets/fastcgi-php.conf 文件。
sudo ln -s /etc/nginx/sites-available/ipipp.com /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
子目录模式下的Nginx规则略有不同,server_name 只保留主域名,同时需要额外处理上传目录的映射。由于子目录模式在Nginx下对 /files/ 路径的重写比Apache复杂,如果刚接触多站点,建议优先选择子域名模式,可以减少静态文件404问题。对于HTTPS,子域名模式使用通配符证书需要通过DNS验证方式申请,主域名和子域名统一使用一张证书即可覆盖。
多站点后台管理与常见问题
配置完成后重新登录后台,顶部工具栏会出现「我的站点」菜单,超级管理员进入「网络管理」可以添加新站点、管理用户以及统一更新插件和主题。新站点创建后,如果在子域名模式下无法访问,优先检查DNS通配符记录是否生效,可以通过 ping 或 dig 命令确认随机子域名是否解析到服务器IP。
后台出现重定向循环是启用多站点后最常见的问题之一。原因通常是 wp-config.php 中的多站点常量不完整,或者Nginx重写规则没有生效。检查时先确认 MULTISITE 为 true,再确认 DOMAIN_CURRENT_SITE 与访问域名完全一致。如果使用子目录模式,还需要保证 PATH_CURRENT_SITE 为 /,否则登录跳转会指向错误路径。
<?php define( 'MULTISITE', true ); define( 'SUBDOMAIN_INSTALL', true ); define( 'DOMAIN_CURRENT_SITE', 'ipipp.com' ); define( 'PATH_CURRENT_SITE', '/' ); define( 'SITE_ID_CURRENT_SITE', 1 ); define( 'BLOG_ID_CURRENT_SITE', 1 );
静态资源404通常表现为后台样式丢失、上传图片无法显示。可以先清除浏览器缓存,再检查Nginx中是否存在针对静态文件的 location 块错误地拦截了 /wp-admin/ 下的样式。多站点上传文件在子目录模式下路径为 /wp-content/uploads/sites/站点ID/,如果固定链接结构为朴素模式,偶尔需要手动刷新固定链接设置,触发WordPress重新生成重写规则。
最后建议在多站点生产环境中开启HTTPS,并在 wp-config.php 中通过 FORCE_SSL_ADMIN 强制后台加密访问。同时定期备份数据库和 wp-content/uploads 目录,因为多站点所有子站点的媒体文件都集中存放,一旦误删会影响全部站点。掌握以上配置和排查思路后,一台Ubuntu服务器就能稳定承载多个WordPress站点,后期维护成本也比独立安装多个WordPress低得多。

