步骤一:拓扑规划
1.1 列表
Content Delivery Network (CDN)
多个可以独立运行的 LNMP + SSL 服务器节点
1.2 拓扑图
Access the website
through the root domain
Client Browser -------------------------------------> Server Node Two
CDN (Content Delivery Network) | ^
GeoDNS | | Fully Copy
DNS Failover | | Regularly
| | by Shell Scripts
| |
---> Server Node One
^
Edit the website |
through the www. prefix |
Edit Console -------------------------------------------
DNS record point directly to
the server IP address
1.3 拓扑图简介
1) 每个 Server Node 都是一个独立运行的 LNMP + SSL 服务器节点
2) 整个架构没有任何自建集群,管理员只在指定服务器节点上进行编辑,然后通过 Shell 脚本定期全量备份到其他服务器节点上
3) 客户端浏览器通过根域名访问网站,管理员通过带 www. 前缀的域名编辑网站
4) 通过禁用 CDN (Content Delivery Network) 的 Cookie 来确保管理员无法通过 CDN (Content Delivery Network) 登录网站的后台。例如防止管理员在 Server Node Two 上登录并修改网站,然后新修改的内容又被 Server Node One 上的老内容覆盖了
5) 本架构实现了 Content Delivery Network (CDN) 网站缓存加速、GeoDNS 用户自动就近访问离自己位置最近的服务器节点、DNS Failover 如果某台服务器挂掉就会被自动踢出然后让后面的访问者都去访问那个好的节点以实现高可用
步骤二:搭建传统的 LNMP + SSL 平台
(步骤略)
步骤三:个人 WordPress 网站实现多节点 (负载均衡加高可用) 和 Content Delivery Network (CDN) 的重点设置
3.1 如果 WordPress 安装了 AIOS (All In One WP Security & Firewall) 插件的话禁用 Enable rename login page feature 以保证获取有效 Cookie
WordPress Dashboard –> AIOS –> Brute Force –> Rename login page –> Enable rename login page feature –> Disable
(补充:如果开启了此功能,则管理员可能无法通过带 www. 前缀的域名登录,因为登录网站时可能无法获得有效的 Cookie)
3.2 通过 Nginx 的配置文件 (/etc/nginx.conf) 分别实现带 www. 前缀的域名和根域名的特定配置
1) 将带 www. 前缀的域名和根域名分开设置成 2 个 server 模块
2) 带 www. 前缀的域名除了这几个文件后缀对其他所有文件的访问都跳转到根域名,这样可以确保只能通过根域名访问网站对外的内容,但是通过带 www. 前缀的域名和根域名都可以访问网站的后台:
wp-login.php|admin-ajax.php|wp-admin|wp-json|wp-includes|wp-content/plugins|wp-content/themes|wp-content/uploads
3) 根域名不对以下文件进行缓存以防止 CDN (Content Delivery Network) 缓存导致网站主页被网站内的其他网页覆盖:
index.php$
(
补充:
)
3.3 通过 WordPress 的配置文件 (/usr/share/nginx/html/wp-config.php) 实现 WordPress 网站可以接受双域名直接访问
# vi /usr/share/nginx/html/wp-config.php
添加以下内容:
......
$domain = array("eternalcenter.com", "www.eternalcenter.com");
if(in_array($_SERVER['HTTP_HOST'], $domain)){
define('WP_SITEURL', 'https://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', 'https://' . $_SERVER['HTTP_HOST']);
}
......
(
补充:
1) 这里以设置 WordPress 网站可以接受双域名 eternalcenter.com 和 www.eternalcenter.com 2 个域名直接访问为例
2) 这样设置后不会出现访问 1 个域名时却被 WordPress 程序自动跳转到另 1 个域名的情况
)
(
注意:
1) 此时 WordPress 后台 Settings –> General 里的 WordPress Address (URL) 栏和 Site Address (URL) 将被锁定,无法在 WordPress 后台修改
2) 进入修改主题时可能会报错 “Non-existent changeset UUID.” 或者直接无法显示
)
3.4 通过 Content Delivery Network (CDN) 的设置实现特定功能
3.4.1 为网站添加 Content Delivery Network (CDN) Pull
(步骤略)
3.4.2 添加 Edge rules 以防止网站首页混乱以及让 Content Delivery Network (CDN) 自动产生的网站访问链接无法被访问
1) 将 */ 和 /index.php 的 Override Cache Time 设置为 0 seconds
2) 将 Content Delivery Network (CDN) 自动产生的网站访问链接 https://8cc443b6-4.b-cdn.net/ 设置为 Block Request
(
补充:
1) 这里以假设 Content Delivery Network (CDN) 自动产生的网站访问链接是 https://8cc443b6-4.b-cdn.net/ 为例
2) 这里以使用 bunny.net 的后台进行设置为例
)
3.4.3 给 ‘s’ 参数开启 query string sort 功能以防止 Content Delivery Network (CDN) 影响 WordPress 网站的搜索功能
Dashboard –> CDN –> click Content Delivery Network (CDN) Pull –> Caching –> General –> Query string sort (enable) –> Vary Cache –> URL Query String (enable) –> Parameter list: –> write ‘s’
(补充:这里以使用 bunny.net 的后台进行设置为例)
3.4.4 开启 Strip response cookies 功能以防止管理员在 Server Node Two 上登录并修改网站,然后新修改的内容又被 Server Node One 上的老内容覆盖了
Dashboard –> CDN –> click Content Delivery Network (CDN) Pull –> Caching –> General –> Strip response cookies (enable)
(补充:这里以使用 bunny.net 的后台进行设置为例)
3.4.5 允许关键爬虫访问 WordPress 网站以允许 Google 等搜索引擎可以持续收录此网站
Dashboard –> CDN –> click Content Delivery Network (CDN) Pull –> Settings –> SEO crawlers –> Allow (enable)
(补充:这里以使用 bunny.net 的后台进行设置为例)
