wking's blog

  • 文章分类
    • 日常随笔
    • IT技术
    • 系统封装
    • 大航海时代
  • 关于博主
GOD'S IN HIS HEAVEN, ALL'S RIGHT WITH THE WORLD.
  1. 首页
  2. IT技术
  3. 正文

WordPress实现全站纯静态

2023-01-15 1664点热度 1人点赞 4条评论

本篇文章实现WordPress全站纯静态,实现全部为html/cs/jss/图片文件、无php文件、无数据库、无wpadmin后台,可将生成的网站存放于静态网页托管,适合企业网站等需求。缺点是由于没有数据库和php交互,评论、搜索功能无法使用。另外也介绍了静态化搭配CDN的配置方法。

为什么要开启WordPress静态

使用静态主要目的有两个。

一个是为了减缓服务器压力。当访客请求网页浏览时,静态资源(HTML/JS/CSS/图片)不需要服务器运算,直接将静态资源原样发给访客即可。而动态资源(PHP/数据库内容)需要服务器经过运算解析后把生成的结果发给访客。很明显动态资源相比静态资源要耗费更多的服务器资源。不需要专业的测试工具,打开WordPress伪静态文章一定比纯静态文章要耗费更多的时间。

另一个是为了提高SEO效果。搜索引擎会对静态html结尾的URL优先索引。

WordPress现有的几种静态解决方案

目前基本上有三种静态解决方案。分别为伪静态、缓存静态、全站纯静态。本文详细介绍全站纯静态。其他两种静态方法较简单,网上有大篇文章介绍。

伪静态

利用WEB软件(IIS/APACHE/NAINX等)的url rewrite功能实现WordPress伪静态。

对于访客来说,访问类似https://wkings.blog/archives/1096或者https://wkings.blog/1096.html这种网址,在服务器WEB软件里通过url rewrite功能把链接转化实际地址。

访客看似访问的网页是静态资源,实际上对于WEB服务器来说仍然是动态资源,因此对减缓服务器压力没有任何效果,只有SEO效果。

设置方法很简单,在WordPress后台-设置-固定链接里,选择你想要的URL格式,再到WEB软件里添加对应的rewrite规则即可(规则网上搜索一下就有,宝塔面板自带)。

WP后台设置固定链接
宝塔面板设置伪静态

缓存静态

缓存静态是安装WordPress的WP Super Cache插件,实现自动生成html静态资源,达到提高网站速度减少服务器压力的效果。

缓存静态的原理是当访客请求一个文章时,WP缓存静态插件会先判断这个文章是否有已经生成的html网页,如果有,则直接读取已生成的html网页给访客;如果没有,则先将文章生成html网页再发送给访客,之后其他的访客就可使用生成的html网页。当已生成html网页时,跳过了解析php和读取数据库步骤,可大幅提高网站速度和减缓服务器压力。

缓存静态的缺点是整套WordPress系统仍然运行于服务器,由于WordPress漏洞或设置不安全,仍然会有被黑客入侵的危险。

设置方法也很简单,安装WP Super Cache插件,开启插件的“启用缓存”和“预缓存”功能即可。详细配置可参考官方文档和网上文章。“启用缓存”功能是插件只生成被访问的html网页,并在设定时间后删除缓存的html文件。“预缓存”功能是定时自动生成全部html网页。

WP Super Cache插件预缓存
WP Super Cache插件生成的文章html文件

全站纯静态

全站纯静态通过WP插件生成WordPress全站静态资源,再配合资源优化插件以及CDN,就可以把全站静态资源放到云计算的对象存储、CDN源站、免费静态网页托管等web服务商,实现数量级的提升网站速度,并拥有无懈可击的安全性。

甚至可以在本地搭建一个WordPress平台,设计好主题、写好文章后,将生成的静态资源上传到对象存储和CDN来搭建网站。访客访问时感觉不到这不是一个真实存在于WEB服务器的WordPress。

需要的WordPress插件

Simply Static插件(https://cn.wordpress.org/plugins/simply-static),用于生成全站静态化。

Autoptimize插件(https://cn.wordpress.org/plugins/autoptimize),用于整合优化资源文件。

Simply Static插件

这个插件用于生成全站静态化。在本地搭建WordPress平台,安装好插件,设置页面主要如下图

Simply Static插件

Local Directory选项

这个选项设置静态资源生成保存目录。我这里设置的是D:/soft/xampp/htdocs/public/。网站根目录是D:/soft/xampp/htdocs。

Destination URLs选项

Use absolute URLs是使用绝对URL路径。不建议选这个,由于本地环境和云端的URL不一样,不好调试。

Use relative URLs是使用相对URL路径。如果设置为/abc/,假设域名是www.abc.com,则URL是www.abc.com/abc/;设置为/,则URL是www.abc.com/。建议设置为/,配合Local Directory选项,可实现生成的文件生成到public目录,而public目录就是生成的网站根目录。将public目录内的文件上传到云存储根目录,即可实现全站静态化。

Save for offline use是转化为离线路径。用于web服务器的网站转化为本地环境使用。

Delivery Method选项

这个选项让你选择生成的是文件目录还是压缩包。

Autoptimize插件

Autoptimize插件也可在缓存静态方案中使用,效果一样。

Autoptimize插件用来合并压缩js/css文件、压缩html文件。

如果不优化,访客打开一篇WordPress文章时,会请求很多个js/css文件,而每个请求都需要单独建立http(s)连接,消耗服务器资源。如果压缩为一个js和css文件,则只需要请求一次,可减轻服务器压力。压缩html文件可以减少传输的html流量,对于CDN来说流量就是成本。

这是优化前和优化后的截图

Autoptimize插件优化前js/css请求
Autoptimize插件优化后js/css请求
Autoptimize插件优化后可以压缩网页源代码

Autoptimize插件打钩开启以下设置

  • JavaScript 选项
    • 启用 JavaScript 优化
    • 合并JS文件
  • CSS选项
    • 启用 CSS 优化
    • 合并CSS文件
    • 合并内联 CSS
  • HTML 选项
    • 优化 HTML 代码吗?
    • Also minify inline JS/ CSS?

其他设置可以不勾选,或按你需要自己勾选。

WordPress静态化和CDN的设置方法

目前国内云厂商提供的CDN服务,CDN源站都可以设置为第三方域名或者该厂商的对象存储。并且由于监管要求,不能用CDN自带的默认域名,需要有一个备案的域名供CDN访问。

第三方域名一般用于伪静态和缓存静态方案的WordPress,以及不备案但也想用国内CDN厂商的海外网站。

对于海外网站,比如网站的域名是www.abc.com,CDN的域名是www.cdn.com(cdn.com已备案),则可以实现访问www.abc.com时,所有www.abc.com的静态资源全部由www.cdn.com提供。

对于海外CDN云厂商,CloudFlare的话,只要把域名的NS服务器指向CloudFlare的NS服务器,再去CloudFlare网站注册一下,就可全自动开启CDN功能。但是国内网络是打不开CloudFlare CDN网络的。

伪静态和缓存静态的CDN

由于这两种静态方案的WordPress实际上还是运行于web服务器,因此可以CDN的静态资源(js/css/jpg)是随时更新的,只能用CDN源站的第三方域名方案。

CDN设置

需要一个备案好的域名供CDN使用。比如我的CDN域名是cdn.blog.wkings.net,网站域名是wkings.blog。

将源站类型设置为域名,源站地址设置为网站域名。

还要在HTTP 响应头的设置里,添加一个响应头。这个设置解决跨域名访问时的请求权限问题。

1
2
响应头:Access-Control-Allow-Origin
内容:*
HTTP 添加响应头

WP Super Cache插件设置

WP Super Cache插件选项-CDN里,打钩开启CDN支持,站点地址是网站域名,Off-site URL是CDN域名,包括目录是包含静态资源的目录。剩余默认即可。

WP Super Cache插件选项-CDN

这样设置以后,在WP Super Cache插件选项-内容里,点删除缓存,再到网站前台看一下,所有静态资源的URL就变成CDN的URL了,实现了自动CDN。

全站纯静态的CDN

全站纯静态方案的WordPress和发布网站一般不在同一个web服务器上,比如我的使用情景是WordPress在本地搭建,将网站发布到海外web服务器,同时将媒体目录(图片/附件)上传到对象存储以便CDN回源。

因此发布网站的流程是:WordPress里用Simply Static插件生成静态网站→静态网站上传到云厂商对象存储或静态网页托管。

CDN设置

需要一个对象存储和备案好的域名供CDN使用。比如我的CDN域名是cdn.blog.wkings.net,网站域名是wkings.blog。

对象存储存放上传的静态网站,CDN回源到对象存储。

upload_url_path设置

打开WordPress后台隐藏设置页你的域名/wp-admin/options.php,搜索upload_url_path,填入CDN域名的WordPress上传附件路径。比如我的CDN域名是cdn.blog.wkings.net,上传的附件目录是wp-content/uploads,那么这么就填https://cdn.blog.wkings.net/wp-content/uploads。

Simply Static插件设置

这个插件没有CDN选项需要设置。

Autoptimize插件设置

Autoptimize 设置-JS, CSS 和 HTML-CDN选项,填入CDN域名,比如https://cdn.blog.wkings.net

自动化

每次生成静态网站后,都需要手动上传到web服务器和对象存储,显然太麻烦,我写了一个批处理实现自动上传。

我web服务器使用rsync软件进行同步,云存储和CDN使用七牛云,本地使用xampp软件搭建环境,htdocs文件夹是web目录。如果你用其他同步软件和云,需要相应修改。

一共三个文件,放到htdocs文件夹的上一层目录。

  • _rsync_htdocs.bat(自动同步批处理)
  • _qiniu_config.txt(七牛云配置文件,使用前需要先配置好七牛云的帐号)
  • _rsync_password.txt(rsync保存密码文件)
_rsync_htdocs.bat
1
2
3
4
5
6
7
8
9
10
11
12
13
@REM 复制favicon.ico图标
copy .\htdocs\favicon.ico .\htdocs\public\ /y
 
@REM 复制媒体目录
xcopy /S /Q /Y .\htdocs\wp-content\uploads\ .\htdocs\public\wp-content\uploads\
 
@REM 同步到web服务器
E:\网络\cwrsync\bin\rsync.exe -avzh --del --password-file=_rsync_password.txt ./htdocs/public/ root@123.123.123.123::root
 
@REM 上传到七牛对象存储
qshell qupload -c 10 _qiniu_config.txt
 
pause
_qiniu_config.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
   "src_dir"            :   ".\\htdocs\\public",
   "bucket"             :   "这个是对象存储的容器名字",
   "ignore_dir"         :   false,
   "overwrite"          :   true,
   "check_exists"       :   false,
   "check_hash"         :   false,
   "check_size"         :   false,
   "rescan_local"       :   true,
   "log_level"          :   "info",
   "log_rotate"         :   1,
   "log_stdout"         :   false,
   "file_type"          :   0,
   "resumable_api_v2"   :   false,
   "resumable_api_v2_part_size" : 4194304
}
_rsync_password.txt
1
123456abcdefg
本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: wordpress
最后更新:2023-01-16

wking

不管博客型博主

点赞
< 上一篇
下一篇 >

文章评论

  • 黑黑胖哥哥

    请教个问题。全静态了以后,是不是就表示那些表单提交啊、评论啊啥的都不能用了?

    2023-06-04
    回复
    • wking

      @黑黑胖哥哥 是的,不能用了。不过第三方评论系统只是插入一段js代码就可以使用(理论上可以,我没实验)。表单我不知道你网站有什么表单,对WordPress前台来说,应该是只有搜索表单?你也可以使用百度、谷歌的站内搜索来间接实现。所以你可以用这个方案:纯静态WordPress+第三方评论系统+搜索引擎站内搜索

      2023-06-07
      回复
  • 黑黑胖哥哥

    谢谢回复。
    评论我可以考虑关掉。
    表单是指我会用wpform做一些比如活动报名表啊之类的让用户填写。这个不能用的话可能有点麻烦。。。

    2023-06-07
    回复
    • wking

      @黑黑胖哥哥 我猜你考虑全静态的话,那应该没有前台会员系统?那么表单也可以使用第三方表单系统(比如我用过腾讯问卷挺不错https://wj.qq.com/)。如果你有会员系统,或者表单系统不能分离的话,那就没法全静态了,可以考虑用缓存静态方案,效果也挺不错的。比如我博客就是缓存静态,动态资源在VPS,静态资源在CDN。

      2023-06-07
      回复
  • razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
    取消回复

    目录
    • 为什么要开启WordPress静态
    • WordPress现有的几种静态解决方案
      • 伪静态
      • 缓存静态
      • 全站纯静态
        • 需要的WordPress插件
        • Simply Static插件
          • Local Directory选项
          • Destination URLs选项
          • Delivery Method选项
        • Autoptimize插件
          • Autoptimize插件打钩开启以下设置
    • WordPress静态化和CDN的设置方法
      • 伪静态和缓存静态的CDN
        • CDN设置
        • WP Super Cache插件设置
      • 全站纯静态的CDN
        • CDN设置
        • upload_url_path设置
        • Simply Static插件设置
        • Autoptimize插件设置
        • 自动化
    标签聚合
    大航海时代 wordpress 一支红杏 C++ win10 linux R6300V2 OneNote

    COPYRIGHT © 2024 wkings.blog. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang