![Photo by Sid Verma]()
因为备案的原因,服务器从深圳迁移到了香港,入手 1C1G1M
的 “乞丐版” 配置,阿里云的海外服务器价格和国内差别不大,但带宽费用是真的贵。经过几天的爬文优化,终于把首页加载时间控制到 300ms 以下。
![DOM TIME]()
选择服务器
写了个简单的批处理测试这些阿里云线路的响应时间,将以下内容另存为 ping.bat
后双击运行。脚本会在 D 盘根目录下生成 result.txt
,从测试结果来看香港线路速度很不错,与华南线的速度差不多。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| ping oss-cn-qingdao.aliyuncs.com >> D://result.txt ping oss-cn-beijing.aliyuncs.com >> D://result.txt ping oss-cn-zhangjiakou.aliyuncs.com >> D://result.txt ping oss-cn-huhehaote.aliyuncs.com >> D://result.txt ping oss-cn-hangzhou.aliyuncs.com >> D://result.txt ping oss-cn-shanghai.aliyuncs.com >> D://result.txt ping oss-cn-shenzhen.aliyuncs.com >> D://result.txt ping oss-cn-hongkong.aliyuncs.com >> D://result.txt ping oss-ap-southeast-1.aliyuncs.com >> D://result.txt ping oss-ap-southeast-2.aliyuncs.com >> D://result.txt ping oss-ap-southeast-3.aliyuncs.com >> D://result.txt ping oss-ap-southeast-5.aliyuncs.com >> D://result.txt ping oss-ap-south-1.aliyuncs.com >> D://result.txt ping oss-ap-northeast-1.aliyuncs.com >> D://result.txt ping oss-us-west-1.aliyuncs.com >> D://result.txt ping oss-us-east-1.aliyuncs.com >> D://result.txt ping oss-eu-central-1.aliyuncs.com >> D://result.txt ping oss-eu-west-1.aliyuncs.com >> D://result.txt ping oss-me-east-1.aliyuncs.com >> D://result.txt
|
使用 OSS 做图床
登录控制台,在 OSS 中新开一个香港区域的 bucket
,选择标准储存
和公共读
,做以下基本设置:
- 防盗链白名单填写
www.imczw.com
,允许空 Referer - 绑定
img.imczw.com
域名,托管 SSL 证书 - 图片处理新增
thumbnail
样式,设置固定长宽为 200:150,居中裁剪 - 在域名解析里将
img.imczw.com
CNAME 到 OSS 的外站域名 img.imczw.com.w.kunlungr.com
- 使用 CDN 加速
img.imczw.com
,选择图片小类型和 OSS 源站,端口 442,加速区域为中国大陆 - 在访问控制增加一个 RAM 账户,分配
AliyunOSSFullAccess
权限,记下 AccessKeyID
和 AccessKeySecret
。
CDN 的加速区域可以理解为访客区域,海外服务器如果想提高国内访问速度,加速区域应该选择 国内
或者 全球
完成以上步骤后回到 Zblog 搜索安装 阿里云OSS - Free
,填写上一步的 AccessKeyID
和 AccessKeySecret
,由于 ECS 和 OSS 都在香港,区域节点填写内网地址可以免流量费用,资源访问域名填写 https://img.imczw.com/
![Zblog-OSS Plugin]()
试一试新建文章上传图片,发布后发现图片地址被替换为 https://img.imczw.com/***.jpg
且正常显示,表示 OSS 接入成功
使用 OSS 缩略图
Zblog 站点使用 Lucky
主题,依赖缩略图插件(IMAGE)
生成首页文章缩略图,由于 OSS 已经支持缩略图服务,可以取消这项功能,把缩略图服务交给 OSS+CDN 来做
- 在主题目录下编辑
theme.xml
,找到 IMAGE
,删除对应的内容和 HTML 标签,解除主题依赖项 - 修改
post-istop.php
,post-search.php
,post-mult.php
中的 IMAGE::
代码段 - 插件中心关闭并卸载
IMAGE
插件
post-istop.php
,post-search.php
,post-mult.php
,相关代码段,根据以下代码修改:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| {php} $temp=mt_rand(1,5); $temp=$zbp->host."zb_users/theme/$theme/style/img/$temp.jpg"; $pattern="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg|\.png]))[\'|\"].*?[\/]?>/"; $content = $article->Content; preg_match_all($pattern,$content,$matchContent); {/php} <div class="post-box tra"> <div class="post-thumb"> <div class="post-cate tra"> <ul class="post-categories"><li><a href="{$article.Category.Url}" title="{$article.Category.Name}" rel="category tag">{$article.Category.Name}</a></li></ul> </div> {if isset($matchContent[1][0])} // 替换相关IMAGE函数 <a href="{$article.Url}" rel="bookmark" title="{$article.Title}"> //将{$atical.IMAGE[0]}替换为{$matchContent[1][0]}-thumbnail <img class="scrollLoading" src="{$host}zb_users/theme/Lucky/style/image/grey.gif" data-original="{$matchContent[1][0]}-thumbnail" title="{$article.Title}" alt="{$article.Title}" /> </a> {else} <a href="{$article.Url}" rel="bookmark" title="{$article.Title}"> <img class="scrollLoading" src="{$host}zb_users/theme/Lucky/style/image/grey.gif" data-original="{$temp}" title="{$article.Title}" alt="{$article.Title}" /> </a> {/if} <div class="clear"></div> </div>
|
伪静态处理
ZBlog 自带静态管理中心,选择伪静态
之后,在底部选择各个页面的 URL 配置,然后切换到 rewrite
规则,将内容复制到 nginx.conf
的 location / { }
节点。oneinstack
默认的配置文件在 usr/local/nginx/conf/rewrite/other.conf
1 2 3 4 5 6 7 8 9 10 11
| location / { if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; } if (-f $request_filename/index.php){ rewrite (.*) $1/index.php; } if (!-f $request_filename){ rewrite (.*) /index.php; } }
|
静态加速缓存
在应用中心搜索 SuperCache全站缓存
,开启 mod-rewrite
方式的文件缓存,并更新 other.conf
的重定向规则,可以在一次访问后自动生成静态缓存文件,将 SQL 调用降低到 0,但同时增加了磁盘 IO,可以根据业务需要自行处理。
![Zblog-SuperCache Plugin]()
后台地址加密
Zblog
的默认后台地址是域名/zb_system/login.php
,将 login.php
重命名,比如修改为 abc12345.php
,然后打开 zb_system
下的 cmd.php
文件,查找 login.php
替换成 abc12345.php
。
但是这样有个隐患,通过域名/zb_system/admin/
会跳转到 Zblog 错误页,错误页面上的登录按钮会指向 /zb_system/abc12345.php
,所以修改 login.php
只是个自欺欺人的方法。
网上有教程说连同 admin
文件夹一起改名,实践证明不可行 —— 改名的涉及文件太多,大部分插件会报错,而且每次新增或更新插件都要重新修改一次文件,不是一个长久之计。
![Zblog-Admin error]()
最终选择方案为 URL 带参,后端检验参数正确才能进入登录页,比如 {域名}/zb_system/login.php?aaaa=bbbb
,在主题目录下的找到 include.php
,然后依次操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| function zblog_login_encrypt(){ global $zbp; $wen="wenti"; $da="daan"; if($_GET[''.$wen.''] !== ''.$da.'') { Redirect($zbp->host); die(); } }
Add_Filter_Plugin('Filter_Plugin_Login_Header','zblog_login_encrypt');
|
使用后台地址加密的注意事项:
- 去掉主题或侧栏包含的登录链接,因为开启本功能后这些链接已失效。
- 代码挂载 login.php,用户中心或主题自带登录地址无效,请直接访问加密后地址
- 如忘记问题答案,使用 ftp 或者服务器工具进入主题 include.php 内去掉此段代码即可
完成以上步骤后,后台地址变更为 {域名}/zb_system/abc12345.php?wenti=daan
,未传参或传参错误都会直接返回首页