关闭WordPress搜索功能

近期接连收到RDS和ECS的使用率异常报警,通过日志发现都是搜索引擎蜘蛛爬虫爬了搜索页地址,而这些搜索词都是违规词,通过搜索这些关键词发现有许多站点中招,其目的是为了在搜索引擎进行非法推广。

%title插图%num
%title插图%num

遂决定关闭WordPress搜索功能,只需在当前主题的 functions.php 文件里加入以下代码即可。

//禁用WordPress前台搜索功能
function disable_search( $query, $error = true ) {
	if (is_search() && !is_admin()) {
		$query->is_search = false;
		$query->query_vars['s'] = false;
		$query->query['s'] = false;
		if ( $error == true )
		// 执行搜索后显示的错误页面
		// $query->is_home = true; //跳转到首页
		$query->is_404 = true;//跳转到404页
	}
}
add_action( 'parse_query', 'disable_search' );
add_filter( 'get_search_form', create_function( '$a', "return null;" ) );

网上找到的代码大都是不兼容PHP7的,经测试以上代码是支持PHP7的。

代码出处:https://zmingcx.com/disable-wordpress-search.html

宝塔面板免费版7.0.3开启收费插件Nginx防火墙的方法

打开 软件管理 > Nginx > 设置 > 配置修改;
查找#include luawaf.conf;,去掉前面的 # 符号(“#”代表注释),保存并重启 Nginx即可开启。

可以试着访问 http://你的网址/?id=../etc/passwd,如果页面弹出拦截提示即表示开启成功!

一般来讲默认开启即可发挥拦截作用,如需修改规则可在/www/server/nginx/waf/config.lua自行修改。

RulePath = "/www/server/panel/vhost/wafconf/"   
--waf 详细规则存放目录(一般无需修改)
attacklog = "on"
--是否开启攻击日志记录(on 代表开启,off 代表关闭。下同)
logdir = "/www/wwwlogs/waf/"
--攻击日志文件存放目录(一般无需修改)
UrlDeny="on"
--是否开启恶意 url 拦截
Redirect="on"
--拦截后是否重定向
CookieMatch="off"
--是否开启恶意 Cookie 拦截
postMatch="off"
--是否开启 POST 攻击拦截
whiteModule="on"
--是否开启 url 白名单
black_fileExt={"php","jsp"}
--文件后缀名上传黑名单,如有多个则用英文逗号分隔。如:{"后缀名1","后缀名2","后缀名
3"……} ipWhitelist={"127.0.0.1"}

--白名单 IP,如有多个则用英文逗号分隔。如:{"127.0.0.1","127.0.0.2","127.0.0.3"……} 下同
ipBlocklist={"1.0.0.1"}
--黑名单 IP
CCDeny="off"
--是否开启 CC 攻击拦截
CCrate="300/60"
--CC 攻击拦截阈值,单位为秒。"300/60" 代表 60 秒内如果同一个 IP 访问了 300 次则拉黑

配置Nginx禁止IP访问以防恶意解析

修改默认访问的站点配置文件,在server_name下方添加以下代码即可。

return 408;

当然改成502、403等其它状态码都可以,如果想把这部分流量导入到指定网站,添加以下代码即可。

rewrite ^(.*) https://www.jiangdefu.com permanent;

若要禁止HTTPS访问,添加监听端口443并配置任意的SSL证书即可。

给WordPress添加关键词和描述

WordPress不能直接添加关键词和描述,为了对搜索引擎比较友好,需要手动进行修改添加,这里提供一个无需插件即可实现的简单方法。

第一步:进入后台,打开外观->编辑->主题页眉 (header.php)

第二步:确认header.php文件是否有修改权限,如果文本编辑器下方有“更新文件”按钮说明有修改权限,如果没有就没有修改权限,进入该文件目录wp-content/themes/theme_name/ 修改header.php的权限为777即可。

第三步:把下面的代码复制到header.php的head标签之间即可。

<?php
//主页描述和关键词,内容为自定义
if (is_home()){
$description = "这里是主页描述";
$keywords = "这里是主页关键词";
}
//文章页面文章名称为描述,文章标签为关键词
elseif(is_single()){
if($post->post_excerpt)
{$description = $post->post_excerpt;}
elseif(function_exists('wp_thumbnails_excerpt'))
{$description = wp_thumbnails_excerpt($post->post_content, true);}
else {$description = $post->post_title;}
$keywords = "";
$tags = wp_get_post_tags($post->ID);
foreach ($tags as $tag )
{$keywords = $keywords . $tag->name . ",";}
$keywords = rtrim($keywords, ', ');
}
//分类页面关键词和描述,is_category()括号中写分类页面的别名
//使用分类名称作为关键词,分类描述做为描述
elseif(is_category()){
$keywords = single_cat_title('', false);
$description = category_description();
}
//标签页使用标签名作为关键字,标签描述作为描述
elseif (is_tag()){
$keywords = single_tag_title('', false);
$description = tag_description();
}
//page页面描述,page_name为你所创建的page页面的别名,可以更换。
//关键词和描述均为自定义
elseif (is_page('page_name')){
$keywords = "这里是关键词";
$description = "这里是描述";}
//打印出描述和关键词的内容
echo "<meta name=\"description\" content=\"$description\" />
<meta name=\"keywords\" content=\"$keywords\" />";
?>

阿里云的突发性能实例居然不限制CPU计算性能?

每年的双11前夕,各路云厂商又纷纷推出双11给力特惠活动。当前阿里云的双11活动又让许多站长蠢蠢欲动,尤其是1核2G的突发性能型t5实例,只要1年86元,3年229元的价格。很多小伙伴看到诱人的价格的同时,发现这款实例赫然标着“20%性能基线”的字样,又惊呼“套路深”、“低价吸引眼球”等哀叹声,以为CPU的计算能力限制到只能发挥出普通性能实例的20%,那你就大错特错了!从阿里云推出突发性能实例至今,博主也一直深深地认为突发性能实例肯定对性能有着限制,经过仔细阅读阿里云的官方文档,发现突发性能实例性居然不限制CPU计算性能!那么突发性能型实例到底是什么,性能基线又是怎么一回事呢?

突发性能实例特点

首先,突发性能实例有个“CPU积分”的概念,先来说说CPU积分是怎么回事。突发性能实例创建后会对实例的每个vCPU分配30个CPU积分,即初始CPU积分。例如,2核云服务器配有2个vCPU,创建实例后拥有60个初始CPU积分。4核的配有4个vCPU,新建实例拥有120个初始CPU积分。CPU使用率等于基准性能时,突发性能实例获得的CPU积分和消耗的CPU积分相等。

假设我们的实例的基准性能为20%,那么每小时获得的CPU积分刚好可以供该vCPU以使用率20%运行1小时(CPU积分无变化),以使用率100%运行12分钟(60分钟*基准性能20%)。是的,你没看错,CPU使用率是可以超过20%,甚至可达到100%。有的小伙伴要吐槽了,只有12分钟根本不够啊,超过12分钟不一样限制了吗?这又要从CPU积分的获取和消耗说起了。

CPU积分获取与消耗

CPU积分获取与基准性能对应,每个vCPU每小时获得12个CPU积分,因此我们的双核实例每小时可获得24个CPU积分。当vCPU使用率低于20%时,也就是出现了获得的CPU积分大于消耗的CPU积分的情况,那么会把没用完的CPU积分进行累积,累积的CPU积分最多保存24小时。

CPU积分的消耗方式不多作说明,直接搬一下官方文档的说明:

CPU积分的消耗速度和突发性能实例的vCPU数、CPU使用率和工作时间有关。例如,以下三种情况都会消耗掉1个CPU积分:
1个vCPU以100%使用率运行1分钟
1个vCPU以50%使用率运行2分钟
2个vCPU以25%使用率运行2分钟
突发性能实例开机后即消耗CPU积分维持计算性能,优先消耗初始CPU积分,初始CPU积分消耗完毕后不会恢复,之后只可消耗获得的CPU积分。
当CPU使用率低于基准性能时,消耗的CPU积分少于获得的CPU积分,CPU积分余额逐渐增加。
当CPU使用率等于基准性能时,消耗的CPU积分等于获得的CPU积分,CPU积分余额保持不变。
当CPU使用率高于基准性能时,消耗的CPU积分大于获得的CPU积分,CPU积分余额逐渐减少。

当我们的实例在突发状况时vCPU使用率会超过基准性能20%,假设满负荷运行100%,那么可以运行12分钟,超过12分钟时就会消耗之前24小时内累积没用完的积分。相信绝大多数小伙伴的服务器不可能24小时都是高负荷运行的吧!有的小伙伴又要问了!(小伙伴的问题有点多)如果累积的积分也消耗完了呢?这里要说到突发性能实例的2种模式:性能约束模式和无性能约束模式。

性能约束模式和无性能约束模式

在无性能约束模式下,当积分消耗完后会预支未来24小时可以获得的CPU积分(预支部分免费),当可预支的CPU积分不够时,会产生费用,当前的收费是0.005元/积分(非中国大陆地域的Windows实例是0.01元/积分)。

%title插图%num已购买的突发性能实例开启无性能约束模式

%title插图%num购买时选择是否开启无性能约束模式

突发性能实例无论在新建时和新建后,无论是包年包月预付方式购买还是按量购买都可以选择是否开启无性能约束模式。

如果要避免被收费,可以不开启无性能约束模式,即性能约束模式。当积分消耗完时,这时CPU就无法超过20%了,这里还要提个比较人性化的设计,当积分较少的时候,实例性能将在15分钟内逐渐下降到基准性能水平,而不是突然急剧下降性能。

查看CPU积分

在控制台实例详情中可直观地查看15天内消耗CPU积分、累积CPU积分、超额CPU积分、预支CPU积分的详情情况。

%title插图%num

要不要选择突发性能实例

当打开无性能约束模式时,突发性能实例与其它实例进行对比,以突发性能实例ecs.t5-lc1m2.large与企业级实例ecs.c5.large为例,两款实例均是2vCPU 4GiB。假设ecs.t5-lc1m2.large实例的初始CPU积分、CPU积分余额和预支CPU积分已消耗完毕,则使用超额CPU积分时的成本变化趋势如下图所示。

%title插图%num

图中按量付费小时价格根据ecs.t5-lc1m2.large配置(基准性能10%、2 vCPU)和超额CPU积分价格(华北2地域、Linux实例)计算得出,供您了解成本变化趋势。条件变化时计算方式相同,但具体临界值存在差异。

可以看到,在使用配置为2vCPU 4GiB的实例时,如果突发性能实例已经开始消耗超额CPU积分:

  • 平均CPU使用率小于57.83%,则选用突发性能实例ecs.t5-lc1m2.large的成本更低。
  • 平均CPU使用率等于57.83%,则选用突发性能实例ecs.t5-lc1m2.large和企业级实例ecs.c5.large的成本相同。
  • 平均CPU使用率大于57.83%,则选用企业级实例ecs.c5.large的成本更低。

因此,如果能准确预估性能需求,可根据CPU使用率临界值选购实例类型,从而在控制成本的同时保证业务正常运行。

下面列出几款热销突发性能实例规格的成本变化趋势。

%title插图%num

%title插图%num

%title插图%num

%title插图%num

结语

突发性能实例并不是直接限制CPU性能,而是不适合长期高负荷使用。这也是阿里云针对用户购买云服务器后发现使用率不高推出的,如果你购买的服务器使用率不是很高(CPU使用率在普遍在50%-70%以下),例如只是方便临时开发测试、给客户临时搭建产品进行演示,或者网站访问量比较低,但是又要保证访客访问时不影响性能。那么墙裂建议可以选择高性价比的突发性能实例。

领阿里云最高¥2000红包
(可叠加官网常规优惠使用)

腾讯云特惠专区

参考链接
突发性能实例概述
https://help.aliyun.com/document_detail/59977.html
CPU积分变化示例
https://help.aliyun.com/document_detail/90635.html
突发性能实例计费
https://help.aliyun.com/document_detail/90581.html

雅虎邮箱恢复服务了

%title插图%num

自2013年8月19日中国雅虎邮箱正式停止服务后,后缀为 @yahoo.com.cn和 @yahoo.cn的邮箱已无法使用,不幸的是博主的邮箱后缀虽为 @yahoo.com,但还是被停止了服务。

yahoo.com.cn 和 yahoo.cn 是中国雅虎的域名,停止服务无可非议,而 yahoo.com 是雅虎美国的域名,怎么也停止服务呢?从报道中了解到造成这种情况的原因是,后缀为@yahoo.com的邮箱在帐户设置时,把国际化(i18n)设置为了中国(CN),意味着接受了中国雅虎邮箱的服务协议,并把邮件存储在中国雅虎的服务器上,邮箱数据是在中国雅虎服务器上的,所以也属于中国雅虎停止邮箱服务的范围。虽然停止服务后@yahoo.com 邮箱帐户会自动转向美国雅虎邮箱服务,但之前在中国邮箱服务器的归档邮件和联系人信息不会随之迁移,也就是说,邮箱归档会丢失。

几个月前博主尝试登录过邮箱,都提示错误信息:暂时错误: 2。以为雅虎邮箱再也不能使用了,今天在查看邮箱帐户时再次尝试登录,神奇地发现居然可以正常登录了!也算是收获了一个小惊喜。遗憾的是中国雅虎发布公告时那会没留意,没有将邮箱归档进行迁移保留,导致空有邮箱帐户而没有邮箱历史归档。

Nginx配置移动端和电脑端自动双向跳转

场景

域名 描述
pc端 www.example.com 用于pc端访问官网
移动端 m.example.com 用于移动端访问

需求

在电脑端访问www.example.comm.example.com都跳转到www.example.com
在移动端访问www.example.comm.example.com都跳转到m.example.com

实现方法

为了实现跳转,可在页面中加入前端跳转代码JS对ua进行适配跳转。这种方式存在三个缺点:
a) 对用户:会加大由重定向的客户端造成的延迟;这是因为客户端需要先下载网页,接着解析并执行 JavaScript,然后才能触发重定向。301或302则不会有这个延迟。
b) 对搜索:爬虫也需要使用支持JS渲染的爬虫,才能发现此重定向。
c) 无法实现双向跳转或兼容性差:笔者尝试过多种公开代码进行测试,只能实现单向跳转,进行双向跳转时会造成死循环。

关于移动适配,百度的官方建议:
https://ziyuan.baidu.com/college/courseinfo?id=156

为了对用户和搜索引擎更友好,我们采取在Nginx进行跳转配置。

代码

电脑端:www.example.com

server {
      listen       80;
      server_name  www.example.com;

      #charset koi8-r;
      #access_log  logs/host.access.log  main;
    # 下面根据user_agent可以获取
     if ($http_host !~ "^www.example.com$") {
      rewrite  ^(.*)    http://www.example.com$1 permanent;
     }
     if ($http_user_agent ~* (mobile|nokia|iphone|ipad|android|samsung|htc|blackberry)) {
      rewrite  ^(.*)    http://m.example.com$1 permanent;
     }
    location / {
            root     /home/build/rampage-home-front/dist/html;
            index  index.html index.htm;
     }

}

作用部分代码如下:

     if ($http_host !~ "^www.example.com$") {
      rewrite  ^(.*)    http://www.example.com$1 permanent;
     }
     if ($http_user_agent ~* (mobile|nokia|iphone|ipad|android|samsung|htc|blackberry)) {
      rewrite  ^(.*)    http://m.example.com$1 permanent;
     }

手机端:m.example.com

server {
      listen       80;
      server_name  m.example.com;

      #charset koi8-r;
      #access_log  logs/host.access.log  main;
    #非移动端跳转到 www.example.com
     if ($http_user_agent !~* (mobile|nokia|iphone|ipad|android|samsung|htc|blackberry)) {
      rewrite  ^(.*)    http://www.example.com$1 permanent;
     }

    location / {
        root     /home/build/rampage-mobile-front/dist;
        index  index.html index.htm;
      }
}

作用部分代码如下:

if ($http_user_agent !~* (mobile|nokia|iphone|ipad|android|samsung|htc|blackberry)) {
      rewrite  ^(.*)    http://www.example.com$1 permanent;
     }

如果配置了SSL证书,需要在443端口同样配置。