Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Varnish:如何将用户代理作为信息发送到wordpress进行404监控_Wordpress_Http Status Code 404_User Agent_Varnish - Fatal编程技术网

Varnish:如何将用户代理作为信息发送到wordpress进行404监控

Varnish:如何将用户代理作为信息发送到wordpress进行404监控,wordpress,http-status-code-404,user-agent,varnish,Wordpress,Http Status Code 404,User Agent,Varnish,我试图找出那些只做关键词收集和(对我来说)无用的搜索引擎优化销售的机器人,比如MJ12bot或AhrefsBot。我的网站已经有24年的历史了,大部分时间都在Wordpress下,但我在某个时候尝试了mediawiki,所以我会得到很多404 我有ApacheVarnishWordPress堆栈,我正在使用Varnish来阻止不需要的机器人。bot.vlc是这样的: sub bad_bot_detection { if ( req.http.user-agent ~ "Daum" ||

我试图找出那些只做关键词收集和(对我来说)无用的搜索引擎优化销售的机器人,比如MJ12bot或AhrefsBot。我的网站已经有24年的历史了,大部分时间都在Wordpress下,但我在某个时候尝试了mediawiki,所以我会得到很多404

我有ApacheVarnishWordPress堆栈,我正在使用Varnish来阻止不需要的机器人。bot.vlc是这样的:

sub bad_bot_detection {

if (
  req.http.user-agent ~ "Daum"
  || req.http.user-agent ~ "MJ12bot"
...
) {
    return(synth(403, "Forbidden Bots"));
} elseif (
    req.http.user-agent ~ "APIs-Google"
    || req.http.user-agent ~ "Mediapartners-Google"
...
) {return(pipe);
} else {
    unset req.http.User-Agent;
    }
}    
在后端/wordpress 404监控由Rank Math SEO插件完成。我正在使用返回(管道);对于“好机器人”,只需获取用户代理。否则,我不知道什么时候应该修复404,什么时候不关心。人类不是问题,因为如果他们得到404,那么就有一个推荐人。所以,我想找到机器人的用户代理,我可以提供给他们很好的错误403

我在谷歌上搜索了很多,varnish和user agent的所有点击都是关于如何为手机提供不同的缓存的类型,或者提示为什么会有所不同:user agent不利于缓存比率。一些文章建议使用Apache2的日志,但由于未设置req.http.User-Agent,所以没有太大帮助;在default.vcl中。我知道所有这些,但我正在尝试将用户代理的名称传递给404监控,而不告诉它

也许我应该使用Varnish日志,但我也找不到用户代理

那么,我应该学习如何与大量404一起生活,还是复制并粘贴所有那些“坏机器人列表”?我可以用清漆来搜索404机器人的名字吗

编辑:有一个语言障碍(如果你能学一些芬兰语,这会更容易),所以让我们看一些截图

这就是我得到的:

这就是我所需要的,但没有每个用户代理单独的“缓存桶”:

(编辑&)关闭(暂时关闭)

如果不使用return(管道),就不可能将用户代理发送到像Wordpress这样的后端应用程序;女巫用清漆是个很糟糕的主意

使用返回(pass);也不起作用,因为它只是不使用缓存,但会执行任何其他操作,如删除vary:user-agent-无论如何,即使它可以工作,但只将user-agent发送到404监视器也是个坏主意


这实际上有点令人沮丧。无用机器人的404不需要任何修复,但谷歌机器人/bingbot/等需要,现在我不知道谁是谁。所以我做了一个bad-bot.vcl来阻止已知的bad/seo收割机,并让google/bing/etc使用return(pipe)通过清漆,所以我让他们的用户代理访问404监视器。我现在可能会(也可能不会)因为加载时间稍慢而失去一些SEO,但这并不是更大的问题。

如果您从Varnish上返回管道,则不会看到管道事务的任何其他内容。 尝试返回pass并使用varnishlog检查404响应


i、 varnishlog-d-q“RespStatus>400”| grep“用户代理”

答案很简单

  • 正常化或不正常化,但不要
    unset-req.http.User-Agent
  • 使用以下命令:
  • 现在Varnish不会使用用户代理缓存(按年龄和缓存命中率),后端WordPress会获取用户代理。现在,如果404来自真实用户/机器人,那么马上就可以很容易地看到


    规范化用户代理使阅读更容易,但这完全是另一回事。

    我来试试。但是return(pass)只是不缓存,而是会规范化标头等,然后unset req.http.User-Agent就开始了——或者我错了?还有最简单的方法;)如果我在404监控中有用户aggent信息,那么重定向要比从varnishlogs中变灰容易得多。当然,如果varnishlog是唯一的选择,那么我必须使用它——或者只使用最重要的选项,就像人类得到404一样。在我第一天早上喝咖啡之后。。。我只是个好机器人,没有别的。
    sub vcl_backend_response {
        
        if (beresp.http.Vary ~ "User-Agent") {
            set beresp.http.Vary = regsuball(beresp.http.Vary, ",? *User-Agent *", "");
            set beresp.http.Vary = regsub(beresp.http.Vary, "^, *", "");
            if (beresp.http.Vary == "") {
                unset beresp.http.Vary;
            }
        }
    }