⭐ 推荐:社区规则条款 V1.0

多站点安装

lqyyzz
lqyyzz 观望站长
发布于 2026-10-15 08:09 ·2 浏览 ·2 回复
内容摘要

多站点安装可选共享用户与后台的网络模式或分库分目录的独立部署,共享管理选前者、客户隔离选后者;网络模式需在 wp-config 开启并配置,缺泛解析和通配符证书先用子目录,独立站用多个 Nginx server 块部署。

多站点安装只有两种路线:一套程序开「多站点网络」(各站共享用户表、插件和后台),或一台服务器装多个互相独立的站点(各自独立数据库和目录)。选错路线的代价很高——WordPress 的子目录网络装完之后无法直接改成子域名网络,只能重装或整站迁移,所以动手前先确定你属于哪一种。

多站点安装该选「网络模式」还是「独立部署」?

结论:需要跨站共享用户、统一管理插件主题、一个后台管所有站,选网络模式;站点分属不同客户、技术栈不同、要独立备份和独立数据库,选独立部署。

网络模式的典型场景是站群、高校各院系站点、同一品牌的多个地区站,用户在一站注册即可登录全部子站。独立部署的典型场景是给不同客户做站、主站和商城用不同程序,一个站被入侵不影响其他站。

两者的运维差别很大:网络模式下所有站点共用一份 PHP 代码和一套数据库连接,一个插件出问题会同时打挂全部站点;独立部署下每个站有自己的目录、数据库、PHP-FPM 进程池,故障被隔离在单站内。磁盘占用上,网络模式省空间但共享风险,独立部署多占 1 倍以上空间但更安全。

WordPress 多站点网络怎么安装?

结论:WordPress 3.0 起内置多站点功能,核心操作是先在配置文件开开关,再到后台「工具 → 配置网络」完成。步骤如下:

  1. 完整备份数据库和 wp-config.php、.htaccess 两个文件,多站点开启后回退很麻烦。
  2. 编辑 wp-config.php,在 /* That's all, stop editing! */ 之前加入 define( 'WP_ALLOW_MULTISITE', true );,注意常量名是 MULTISITE,拼错不生效。
  3. 登录后台,进入「工具 → 配置网络」,此时会让你选子域名或子目录。
  4. 选完模式后,把页面给出的两段代码分别粘回 wp-config.php(含 MULTISITE、SUBDOMAIN_INSTALL、DOMAIN_CURRENT_SITE 等常量)和 .htaccess,然后重新登录。
  5. 到「我的站点 → 网络管理 → 站点 → 添加新站点」建站,或用 WP-CLI 执行 wp site create --slug=news --title="News" --email=admin@example.com。
  6. 检查数据库里是否新增了 wp_site、wp_blogs、wp_sitemeta、wp_signups 表——这些是多站点的核心表,每个子站的数据则存在 wp_2_posts、wp_3_posts 这类带编号前缀的表里。

子域名和子目录的选择标准很明确:子目录模式(example.com/news)只需要主域名解析和一张普通 SSL 证书,改造成本最低;子域名模式(news.example.com)必须配置泛域名解析(*.example.com 指向同一 IP)和通配符证书(*.example.com),Let's Encrypt 的通配符证书只能用 DNS-01 方式签发。结论:没有泛解析和通配符证书的条件,就先选子目录模式。

一台服务器装多个独立站点,Nginx 怎么配?

结论:用多个 server 块,每个站点一个独立目录、独立数据库、独立 PHP-FPM 进程池,SSL 证书用 certbot 逐站签发。

server {
    listen 443 ssl http2;
    server_name a.com www.a.com;
    root /www/a.com;
    ssl_certificate     /etc/letsencrypt/live/a.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/a.com/privkey.pem;
    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.2-fpm-a.sock;
        include fastcgi_params;
    }
}

关键动作有三个:一是给每个站在 /etc/php/8.2/fpm/pool.d/ 下建独立池文件,listen 指向不同的 socket,这样 A 站被刷爆不会耗尽 B 站的 PHP 进程;二是每个站建独立的数据库和数据库用户,不要所有站共用一个 root 账号;三是证书逐站签发,命令是 certbot --nginx -d a.com -d www.a.com,多个域名就重复执行。

多站点安装最容易踩的坑有哪些?

结论:90% 的「装完子站 404」都出在伪静态规则和证书范围上。

  • 子目录模式必须补全重写规则。Nginx 下要加 rewrite ^/(wp-.*\.php)$ /$1 last; 和 if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?q=$1 last; },Apache 下依赖 .htaccess 的 RewriteRule,缺了这段子站一律 404。
  • 插件和主题要区分「网络启用」和「单站启用」。网络启用后所有子站都被强制加载,数量控制在 10 个以内,否则每个子站的每个请求都要多跑这些代码。
  • 备份要按整库备份。多站点是共享数据库的,单独导出 wp_2_* 表导不出用户和站点配置,恢复时会缺 wp_site 和 wp_sitemeta,站点直接打不开。
  • 迁移时注意常量同步。改域名要同时改 wp-config.php 里的 DOMAIN_CURRENT_SITE 和数据库 wp_site、wp_blogs 两张表里的域名,漏一处就跳转到旧域名。

多站点安装的本质是「先定架构,再敲命令」:共享用户和统一后台就走网络模式,需要隔离和独立备份就走独立部署。网络模式记住三件事——配置文件开关、子目录/子域名一次选定、重写规则不能漏;独立部署记住三件事——独立目录、独立数据库和数据库用户、独立 PHP-FPM 池。把这几个动作做完,多站点才能稳定跑起来,而不是上线三天后开始互相拖累。

本文转载自 GJ站长论坛,原文地址:https://www.gj0.com/thread-2101.html
转载请注明出处,版权归原作者所有。
—/ 5暂无评分
还没有评分,来打第一分吧

全部回复 2

juming
juming 初级会员萌新站长 1楼 2026-10-15 08:22

先定路线、再动手,尤其是选了 WordPress 网络模式的话,「子目录还是子域名」必须在点确认前想死——这一步没有官方回退路径,改起来比重新装一遍还麻烦。

补一下你断掉的那段 Nginx 配置要点。多站独立部署最关键的不是 server 块,而是 PHP-FPM 进程池隔离:每个站单独建 pool,listen = /run/php/fpm-siteA.sock(或 127.0.0.1:9001/9002),在对应的 server 块里 fastcgi_pass unix:/run/php/fpm-siteA.sock;,同时给每个 pool 配独立的 user、open_basedir、pm.max_children。最常见的错误是几个站全部 fastcgi_pass 127.0.0.1:9000,结果一个站跑飞了把所有 FPM 子进程占满,其他站一起 502,等于白做了隔离。日志也要 access_log /var/log/nginx/siteA.access.log 分开,排查问题时才不会串。

网络模式这边有两个容易踩的点:一是用了 Nginx 就别去抄 .htaccess,WordPress 官方的 multisite rewrite 规则要写进 server 块,否则子站后台 404;二是 DOMAIN_CURRENT_SITE 必须和实际访问域名完全一致(带不带 www 都算不同),写错会直接重定向循环,进不去后台。

最后一个坑:子目录改子域名虽然理论上能靠改 SUBDOMAIN_INSTALL 加批量更新 wp_blogs 表的 domain/path 硬来,但插件、上传文件路径、已发出的链接全都要跟着改,生产环境基本等于重做,所以能提前定就提前定。

域名注册
域名注册 版主萌新站长 👑黑卡会员 #1903 2楼 2026-10-15 08:29
juming:先定路线、再动手,尤其是选了 WordPress 网络模式的话,「子目录还是子域名」必须在点确认前想死——这一步没有官方回退路径,改起来比重新装一遍还麻烦。 …

你这句"没有官方回退路径"是全文最值钱的一句,我顺着补几个配套细节,都是踩过才知道的。

pool 隔离要配全,光有 listen 不够。 独立 pool 还得给每个站配独立的 open_basedir,且必须包含 uploads 目录、/tmp、session 保存路径,少一个就是上传白屏或后台登录态丢失,排查起来很折磨。pm.max_children 别拍脑袋写 50,按「可用内存 ÷ 单进程 RSS」估算,再留 30% 余量——PHP 进程跑起来后常驻内存会涨,按启动时算会爆。

数据库侧要做同等隔离。 每个站建独立 DB 用户,只 GRANT 自己那个库,别几个站共用一个账号。否则一个站被挂马,等于把旁站的数据全递出去了,FPM 隔离白做。

Nginx 那边还有个易漏点: multisite 的 rewrite 规则要写在 server 块的 location / 里,同时确认没有别的 location 把 /wp-admin 截胡,否则表现就是前台正常、子站后台 404,很容易误判成常量写错。

至于子目录改子域名,除了硬改 wp_blogs,也有人用反向代理把 news.example.com 转到 example.com/news 来蒙混过关,但 cookie 域和上传路径照样错乱,只能算演示环境应急,别上生产。

延伸一句:网络模式迁移域名时,wp_blogs、wp_site、wp_options 里的 home/siteurl 必须一起改,用 wp search-replace --all-tables 才彻底,手动 UPDATE 很容易漏表。