作为一个WordPress站长,总是想让自己的网站足够快,用户的体验足够好。当前,WordPress的安全性问题也是不得不考虑解决的。今天,就来分享下冰沫记这个网站从建站初期到最近这段时间,古哥所做过的那些改变。当然,本文主要包括的内容就是网站首次访问速度、网站二次加载速度、网站安全性问题解决。
WordPress建站环境
熟悉我的人,肯定知道我习惯用apache建站。我所使用的环境从建站初期一直都是lamp,lamp指的是linux(我习惯用centos)、apache、mysql、php。具体的版本号,参考如下:
项目 | 版本号 |
---|---|
Centos系统 | Centos 7.8 |
Apache | 2.4 |
MySQL | 5.7 |
PHP | 7.4 |
Memcached | 1.6 |
WordPress | 6.1(最新) |
WordPress速度优化
一个网站的访问速度,取决于两个因素。第一个是首次访问速度,第二个就是二次访问速度。下面,我们分别介绍这两个方面是如何优化的。
首次访问优化
这个优化方面,主要是服务器方面和WordPress方面。我们所做的优化分别有:hsts预加载列表、opcache缓存php解析结果、memcached缓存数据库查询结果、Autoptimize优化css等资源、Async JavaScript异步加载js。
hsts预加载列表,可以理解为:用户在访问网站时,会判断你是http网站还是https网站。通过这个预加载列表,可以实现在用户访问之前就能知道是https。这里我用的apache,给出apache关于hsts配置内容如下:
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
上述代码放于网站配置文件中,一般是httpd.conf文件等网站配置文件。宝塔界面,可以直接点击网站,设置,切换到配置文件选项,添加内容即可。
然后,再到https://hstspreload.org/网站,提交一下你的网站。之后,各大主流浏览器就会内置你的域名到他们的hsts列表中,直接内置到浏览器中。
opcache缓存php解析结果,这个部分就比较简单了,宝塔软件商店找到你安装的php版本,点击设置,切换到安装扩展选项,安装opcache扩展即可,就不做过多演示了。
关于memcached缓存数据库查询结果的问题,我们在以前的文章已经提过很多遍了,这里再提一句:你需要安装memcached以及php中安装memcached扩展(宝塔安装memcached也是这么逻辑)。最后,再到wordpress中添加配置即可。当然,你可以参考我之前写的教程:《WordPress使用Memcached缓存数据库查询结果》。
最后,Autoptimize优化css等资源以及Async JavaScript异步加载js都是使用的WordPress插件,这里我觉得你不要过分排斥WordPress插件。除非你认为插件无法实现自己的功能,才需要使用代码。也不要认为WordPress插件会影响网站访问速度,你需要知道的是我的网站用了16款插件,速度也并没有什么影响。
当然,我还做了图片动静分离,用的是又拍云的服务,这也是不得不提的一个加速策略。毕竟,国内的服务器水管都太小,不把图片放到云存储的话,速度应该会大打折扣的。
二次访问速度
关于提升二次访问速度的问题,一方面是这个网址第二次被人访问,一方面是指这个人二次访问这个网站。相信这一点的不同,大家都是同意的。
网址被人二次访问
关于网址被人二次访问,这个提升就可以考虑将网站生成静态页面缓存,这里我推荐使用WP Super Cache这款插件,关于插件使用不懂得话就直接默认吧,也可以参考我之前写的文章:《WP Super Cache缓存插件详细设置教程》、《WP Super Cache插件使用我所推荐的设置》。当然,我最近又对WP Super Cache设置调整了一部分内容,主要是调整了缓存内容有效期,主要的设置可以参考如下截图:
我将缓存超时时间改为了432000秒,即一个页面生成的静态资源可以使用五天。每天下午五点检查页面缓存是否到期,并对到期文件进行清理。
这里,我不得不提醒一下,WordPress中存在一个随机数校验,用于安全考量,随机数会每隔一段时间会重新生成,而这个时间是随机的。那么当用户访问一个静态页面时,如果遇到随机数校验的地方,而这个随机数正好过期了,那么就会无法使用对应的功能,比如评分系统、登录系统等。
//随机数
add_filter( 'nonce_life', function () { return 288 * HOUR_IN_SECONDS; } );
上述代码(放于主题function.php中即可)将随机数时长改为288个小时,大体原因为:我的静态页面有效期五天,如果正好在下午五点前一刻生成了一个静态页面。那么这个页面的有效期就会变为六天,因为第五天下午五点清理过期缓存文件时,它还差那么几秒才到时间。所以,我虽然设置了静态页面的有效期为五天,实际上有可能出现某些页面静态有效期为五天到六天。
而WordPress提供的随机数时长修改有着如下问题:当你设置随机数有效时长为24小时,实际随机数有效时长为12-24小时随机变化的。这里,我综合考虑,将随机数时长改为了288个小时,对应12天。
访客二次访问网站
关于访客二次访问网站,这就要考虑你的资源是否在对方浏览器本地生成缓存,以及各种预加载的使用了。这里我所用到的缓存包括Service Worker缓存(WordPress使用Service Worker加速网站教程)、instant的预加载技术,我所使用的是在用户点击链接后立即开始预加载页面(当然,也可以改成当鼠标滑过链接,立即开始预加载),官方链接:https://instant.page/
WordPress安全性问题
关于WordPress安全问题,一直是大家讨论的问题,有些人也从来不注意,导致网站被人爆破才意识到安全问题。WordPress每次发布更新,你都及时更新到最新版可以一定程度上提升你网站的安全性。当然,这只是漏洞方面的升级。而从站长考虑,我们应该做的是,屏蔽掉那些可以爆破网站后台登录密码的接口,比如wp-login.php以及xmlrpc.php这两个文件。
其中,wp-login.php文件为WordPress后台登录页面,为了安全考虑请直接屏蔽掉该文件的访问。
xmlrpc.php是一个可以访问后台资源的接口,主要是方便使用WordPress官方app管理网站后台使用,完全没有存在的必要。而且,这个文件可以不断访问,不断尝试你的账号和密码,没有任何限制。大多数人网站后台被爆破都是这个原因。
那么我们该如何屏蔽以上两个文件呢,在apache中,可以使用.htaccess文件添加如下代码实现禁止访问
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>
<Files wp-login.php>
Order Deny,Allow
Deny from all
</Files>
宝塔用户,可以将如下链接添加到url防火墙黑名单,禁止访问:
/wp-login.php
/xmlrpc.php
你可以尝试访问本站的上述两个页面,看看实际效果:
- iymark.com/wp-login.php
- iymark.com/xmlrpc.php
此外,请尽量避免使用破解版插件及破解版主题。
系统安全问题
这里,我提供一个思路,当然我也是这么办的。
阿里云安全组设置,只允许固定的ip或者ip段访问宝塔后台(通过端口规则设置),只允许127.0.0.1访问ssh端口(宝塔后台的ssh终端就是用的127.0.0.1本地访问ssh)。最好,你在用上宝塔的防火墙。
谷歌广告兼百度广告
之前我痴迷于谷歌自动广告,可以参考之前写的关于谷歌广告的文章:《为什么我愿意使用谷歌广告来增加网站的盈利》。
最近,我发现谷歌的自动广告也有点乱来了,竟然在我的导航区域设置广告,极其丑陋。最终,我决定百度广告和谷歌广告均只在首页放一个单元广告,文章页面放一个单元广告,其余位置均不显示广告。文章的广告位于文章结尾处,丝毫不影响访客体验。
最近,我也想到了一个提醒访客关闭广告屏蔽插件的方法,那就是在广告单元上一级添加一个div,然后给这个div设置一个背景,背景设置为一个图片。当用户屏蔽广告后,这个图片就会显示;未屏蔽时,广告会覆盖这个图片。图片上写上一些内容提醒访客关闭广告屏蔽插件。
<div class="mine">
广告内容
<div>
对应的CSS参考:
.mine{
background-image: url(https://oss.iymark.com/2022/12/loveme.png);
min-height: 100px
background-color: #fffff4;
background-repeat: no-repeat;
}
如上div中的class请不要使用明显包含广告等字样的名称,不然也会直接被广告屏蔽插件屏蔽。
付费咨询古哥
关于WordPress类的文章写了不少,如果你还是不会操作或者实在想给古哥一点点感激,我觉得你可以考虑我的付费咨询问题。如果你是纯属为了感激,随便打赏个几块就行;如果你真的有些内容需要咨询我,我推荐你使用本站的付费内容:《WordPress 网站加速优化方案》,包括但不限于WordPress访问速度的优化。
原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/3991.html
评论列表(10条)
nginx怎么配置HSTS啊
@微信解封平台:add_header Strict-Transport-Security “max-age=63072000; includeSubDomains” always;
配置文件,server段里添加如上代码
@古哥:我也是Nginx。hstspreload.org那边给的反馈是“The header must contain the `preload` directive.” 说标头必须包含preload
@剑心:add_header Strict-Transport-Security “max-age=63072000; includeSubDomains; preload” always;
试一下这样行不行吧
@古哥:这样点击保存,宝塔会直接报错
@古哥:可以了古哥,引号改成小写就正常了
古哥,nginx怎么屏蔽wp-login.php和xmlrpc.php这两个文件呢?
@醉眼朦胧:试试宝塔防火墙呢
@醉眼朦胧:location = /wp-login.php
{
deny all;
}
location = /xmlrpc.php
{
deny all;
}
或者试试这样行不行
@古哥:好的,谢谢