大概阅读时间15分钟
什么是多站点(Multisite)
在前面我们完成了基于LEMP的WordPress的部署,接下来我们要进阶了解下WordPress多站点(Multisite)的配置。
首先什么是多站点呢,简单来说,多站点就是在一台服务器上运行多个独立的WordPress网站,这意味着你可以使用同一套WordPress来运行多个网站,而每个网站都可以有自己的内容、用户和权限。例如,我创建了这个Blog网站后,我的朋友或者我需要开放注册让更多人使用,同时他们需要拥有自己风格的独立的Blog网站,就可以开启多站点模式。
多站点模式介绍
WordPress多站点能够在单个WordPress安装中控制和管理一个网络内的多个网站。一旦启用,多站点网络允许添加新的站点,并使用安装的主题和插件。每个站点都可以拥有自己的独立内容和用户,但是它们共享同一套WordPress的核心文件、插件和主题。
多站点网络由超级管理员进行管理,他们拥有对网络中所有站点的全面控制权,包括添加和删除站点、安装插件和主题、以及执行全网络范围内的更新。而网络中的其他站点管理员,只能管理他们自己的站点,不能访问其他站点的数据。
多站点模式的类型
WordPress Multisite目前支持两种主要类型的多站点配置:
子目录: 这种类型的多站点设置将每个网站作为主网站的一个子目录安装。例如,如果你的主站点是 https://example.com,那么子目录站点就是 https://example.com/site1 和 https://example.com/site2 这种方法比较简单,不需要对DNS进行特殊配置,通常适用于那些不需要独立域名的网站。
子域名: 在这种设置下,每个网站使用子域名而不是子目录。和子目录相比,子域名站点将使用 https://site1.example.com 和 https://site2.example.com 这种方法除了站点的配置外,还需要额外的DNS配置,即为每个子域名添加A记录或CNAME记录,但它会让每个网站显得更加独立。
我当前的站点启用的子目录模式,所以后续内容主要介绍子目录模式的多站点配置,而子域名模式我并没有验证具体实施的可行性,所以仅供参考。
子目录模式多站点
启用WordPress多站点
WordPress从4.9.0开始,多站点功能默认是关闭的,所以你需要手动启用它。不然不会看到网络安装的选项。
-
修改wp-config.php:登录到服务器,进入网站的根目录下,使用编辑器编辑wp-config.php文件
sudo vim wp-config.php
。
在文件的底部,有一行注释/* That's all, stop editing! Happy blogging. */
,在这一行之上,添加以下代码:/* Multisite */ define('WP_ALLOW_MULTISITE', true);
保存并关闭文件,回到网站开始配置。
-
安装网络:登录到你的WordPress仪表盘,进入“工具” > “网络安装”。选择“子目录”作为网络类型。然后根据屏幕上的步骤完成设置,你需要输入网络的名称、管理员用户名和密码,以及你的网络地址,这一部分用于整个网络。
-
配置网络:安装完成后,WordPress会提供一段代码,需要回到wp-config.php文件,继续添加提供的代码:
define( 'MULTISITE', true ); define( 'SUBDOMAIN_INSTALL', false ); // Replace blog.example.com with your domain. define( 'DOMAIN_CURRENT_SITE', 'blog.example.com' ); define( 'PATH_CURRENT_SITE', '/' ); define( 'SITE_ID_CURRENT_SITE', 1 ); define( 'BLOG_ID_CURRENT_SITE', 1 );
由于我们使用LEMP Stack,所以没有Apache的 .htaccess的配置文件来轻松完成重写,因此在创建完之后,需要在Nginx配置文件写入规则对子目录进行重写(因为子目录实际读取的仍然是Wordpress主站的资源和配置,它并不会真正的创建不同的子目录并复制一份完整的资源)。
添加站点
在配置Nginx之前,我们先添加子站点,这样我们才能在Nginx中进行配置验证。
-
添加子站点:登录到你的WordPress仪表盘,进入“网络” > “站点”,然后点击“添加新站点”。
-
填写子站点信息:根据需求输入子站点的名称、标题、管理员的邮件。
填写完成后,新的站点就会是https://blog.example.com/site1 点击“添加站点”就结束了。
设置完成后,可以进入站点,在用户页面为管理员设置一个密码。(后面可以尝试做一个生成随机密码发送到管理员邮件,进一步简化管理)
Nginx配置
完成了子站点的添加,接下来我们需要配置Nginx,以实现子目录的访问,否则会因为没有这个路径存在而直接提示404。
-
登录服务器,编辑网站的Nginx配置文件,根据上一篇内容,位于/etc/nginx/sites-available/目录下:
sudo vim /etc/nginx/sites-available/blog.your_domain.com
-
在配置文件server块内,添加重写的判断,并将子目录的请求转发到WordPress主站:
#子目录重写规则 rewrite ^/wp/([_0-9a-zA-Z-]+)/(xmlrpc\.php|wp-[0-9a-z-]+\.php) /wp/$2; rewrite ^/wp/([_0-9a-zA-Z-]+)/(wp-(admin|content|includes).*) /wp/$2; location / { index index.php index.html; try_files $uri $uri/ /index.php?$args ; } rewrite /wp-admin$ $scheme://$host$uri/ permanent; #将子目录wp-admin重定向到主站wp-admin #子目录重写规则:如果请求的文件不存在,则尝试按WordPress多站点结构重写URL if (!-e $request_filename) { rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last; rewrite ^/[_0-9a-zA-Z-]+.*(/wp-admin/.*\.php)$ $1 last; rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last; } ####另一种写法:如果上一个规则匹配有问题,可以尝试这一个 #if (!-e $request_filename) { # rewrite /wp-admin$ $scheme://$host$uri/ permanent; # rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) /wp$1 last; # rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ /wp$1 last; #} #### #PHP处理部分 location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_read_timeout 3600s; fastcgi_pass unix:/var/run/php/php-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
通过上面的配置应该已经完成了多站点子目录模式的所有配置,如果还有问题可以再参考下官方文档根据自己的实际情况进行检查和调整。
子域名模式多站点
这部分内容适用于需要启用子域名的子站,如果建立了子目录模式的多站点,这部分内容可以忽略。
启用子域名模式的方法与启用子目录模式基本相同。需要通过修改wp-config.php文件来启用多站点功能,在设置时选择子域名选项作为你的网络类型。中间的网络配置步骤和添加站点跟前面类似,就直接跳过了(相信根据指引应该不会有问题)。
Nginx配置
-
修改Nginx配置文件
sudo vim /etc/nginx/sites-available/blog.your_domain.com
,在server块中添加以下内容:server { server_name blog.yourdomain.com *.blog.yourdomain.com; # 捕获所有子域名 root /var/www/blog.yourdomain.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/php-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
DNS记录配置
每个子域名都需要在你的DNS提供商处设置相应的记录才能正确解析访问到。对于每个子站点,你将需要添加一个A记录或CNAME记录:
-
A记录:将子域名指向你的服务器的IP地址。例如,如果你的子站点是 site1.blog.yourdomain.com,则需要添加一个A记录,将site1直接指向你的服务器IP地址。
-
CNAME记录:将子域名指向主域名。这种方法适用于不希望直接暴露IP地址或在使用CDN服务的情况。例如,如果你的子站点是 site1.blog.yourdomain.com,则需要添加一个CNAME记录,将site1指向 blog.yourdomain.com。(需要注意的是,有的提供商创建CNAME时只需要填入site1,而有的提供商需要输入完整的site1.blog.yourdomain.com)
如果支持泛域名记录,也可以使用泛域名记录来代替,例如,直接将 *.blog.yourdomain.com 指向服务器IP或者创建CNAME。这样可以简化后续的配置不用每个子站点都去创建一条。
总结
相信通过前面的步骤,你已经成功配置了一个WordPress多站点,WordPress提供了强大而丰富的功能,允许用户从单一的WordPress安装中创建、管理和运营多个网站。这种能力为网站管理员提供了前所未有的灵活性和控制力,使得管理大量相关网站变得更加高效和简单,当然具体怎样选择使用依赖于你的规划,作为一个个人网站,当你的网站越来越大的时候,需要投入的精力也会更多,是否需要使用这些功能还是要综合来考虑的,最后让我们来简单的做一个梳理。
多站点设置的好处
-
中心化管理:多站点网络使得更新、管理和维护多个网站变得更加简单。管理员可以从一个仪表盘更新核心WordPress文件、插件和主题,这意味着所有的网站都可以同时得到更新。
-
资源共享:在多站点网络中,所有网站都可以使用可用的插件和主题,从而减少了重复资源的需要。这不仅节省了空间,还确保了品牌和设计的一致性,同时子网站也可以根据个人风格做一定的调整。
-
用户管理:多站点允许超级管理员在整个网络中创建和管理用户。用户可以被授予在一个或多个网站上的不同权限,使得用户管理变得更加集中和高效。
-
成本效益:通过共享主机和资源,多站点网络减少了运行多个独立网站的成本。这对于拥有多个相关网站的企业或组织来说是一个巨大的优势,对于个人或初创公司来说也是一个好的开始。
面临的挑战
-
增加的维护工作:虽然多站点网络简化了很多管理任务,但超级管理员需要对整个网络进行监控和维护,这可能会增加工作量,所以要确定好自己的目标,在推广之前要做好准备。
-
更复杂的配置:设置和管理多站点网络比管理单个WordPress网站要复杂。这包括网络的设置、域名配置、服务器配置和潜在的安全问题。
-
插件和主题兼容性:并非所有插件和主题都与多站点环境兼容。这可能限制您可以使用的资源,并需要额外的时间来测试和调整以确保稳定性,毕竟这不再是你一个人在使用了。
-
性能考虑:运行多个网站可能会对服务器资源产生更大压力。为了保持网站性能,可能需要更强大的服务器配置或优化策略,成本也会相应的提高。
最后,尽管存在这些挑战,WordPress多站点仍然是一个强大的平台,如果你想更深入的理解这些技术,是可以进一步研究的,在完成中间的挑战之后,相信这对你的能力会有很大的提升。
参考链接:
https://www.gingerdoc.com/tutorials/how-to-set-up-wordpress-multisite-on-ubuntu-20-04
https://computingforgeeks.com/how-to-setup-wordpress-multisite-network-nginx-letsencrypt/
https://developer.wordpress.org/advanced-administration/multisite/
https://developer.wordpress.org/advanced-administration/server/web-server/nginx/