解决wordpress(插件)更新失败 429等错误(有更新)

  • A+
所属分类:wordpress 技术分享

众所周知,wordpress.org近期一直出现这种“429 Too Many Requests”错误,插件和内核后台更新的时候也出现wordpress更新失败:下载失败,Too Many Requests”的错误,或者wordpress更新插件下载失败,那么我们如何来解决他呢?

首先这个不是吹牛逼,是真的解决问题,也基本是网上售卖的什么加速的插件的原理,有点小复杂,但是能搭建wordpress的童鞋肯定是没压力的!网上一大抄,看了几个帖子根本解决不了问题,什么反代官网,下载下来,手动安装。

什么插件配置http代理,我曾经一直是搭建的v某ray转化成http代理去配置里面定义的,慢就不要说,感觉还是很不稳定!委曲求全,一个多小时终于有了一个思路,而且经过本博客测试通过,看到五六个插件升级和内核更新完成,终于解决了国内wp不好使的问题,而且因为优化过,后台打开插件的也可以秒开!

基本原理,劫持wordpress下载域名和api域名,到我们的反代的网站上,关闭wordpress请求的ssl选项,因为劫持域名可以,但是你没法真正做到能完整欺骗到https的wordpress官网,域名和证书都一致的情况!原理看起来有点复杂,但是,做起来就几步!

2020/03/04更新,提供全自动的免费反向代理地址,并且无需更改密码

服务器设置hosts

130.61.253.31 api.wordpress.org

130.61.253.31 downloads.wordpress.org

不放心的话可以ping下这两个域名是不是正确指向,可以直接使用此ip,直接复制粘贴

配置wordpress curl请求的根证书

路径在:

wp-includes/certificates/ca-bundle.crt

替换为本站提供的crt文件

替换上面的文件,然后打开插件页面,是不是就可以很快的更新,再也不需要什么其他的外挂插件,付费服务了!

如果升级了wordpress版本,必须重新做一次替换,因为新版本可能会覆盖掉这个证书文件!

原理

总会有大佬喜欢折腾,简单讲下原理

host是用来劫持wordpress接口域名的地址,让他到我们的服务器来

服务器上配置反向代理到源wordpress服务器,但如果你是https的服务,则会走https流量,这时候我们会替换自带的root证书库,让他支持我们自己签发的证书,也就是上面下载的那个文件,替换下来的目地!

好了,下面的是历史教程,可以不看,到这里基本就可以上高速了,再也不怕wordpress在国内的影响了!升级主题,插件,更新wordpress版本,和在国外一样,不需要担心什么网络了!

注意!如果你是cdn,比如腾讯云会有源站时间限制,超过这个时间就直接断了,虽然提示失败,但是实际是成功的,你可以host强制到你的源服务器ip地址就好了,强制不走cdn~

历史教程:

需要准备的

具有公网ip的国外服务器,可以使用免费的Oracle服务器,申请介绍:

https://www.echoteen.com/oracle-ebesucher-make-money.html

一、配置反向代理

首先你得要有一个域名,反向代理wordpress关键的两个域名,api.wordpress.org和downloads.wordpress.org,域名可以是正规域名,也可以是随便自己造,可以是fake.com啥的,反正是后面可以hosts指定,如果你要搭建给别人用的话,也可以hosts指定,或者公网域名去做A记录~

这一步比较简单,宝塔面板去创建两个网站

例如dlwp.echoteen.com作为wordpress的下载域名

解决wordpress(插件)更新失败 429等错误(有更新)

同样再创建一个api.wordpress.org的反向代理的网站,例如apiwp.echoteen.com,一样的配置反向代理。

验证是否成功,可以试下打开下面链接

http://api.wordpress.org/core/version-check/1.7/?

地址转化为反代的地址比如:

https://apiwp.echoteen.com/core/version-check/1.7/?

解决wordpress(插件)更新失败 429等错误(有更新)

那么好,代理说明成功了,基本成功一半啦,同理设置下下载站的反向代理,我们会通过更新接口获取到地址,downloads.wordpress.org/release/wordpress-5.3.2.zip,文件能成功下载下来就可以了!

二、搭建wordpress服务网站,做劫持

创建一个假的wordpress的api和下载网址,例如下面这样

解决wordpress(插件)更新失败 429等错误(有更新)

配置下301跳转,把wordpress的地址跳转到自己的反代网站上去

解决wordpress(插件)更新失败 429等错误(有更新)

基本上差不多了,劫持的站也做好了,反代的网站也好了,下一步!

三、配置hosts

这一步的目地就是吧wordpress的api和下载站hosts强行指定到我们的ip地址

解决wordpress(插件)更新失败 429等错误(有更新)

图中圈出来的就是你的服务器ip地址,下面两个是反向代理的服务,你可以DNS去配置A记录,但是我为了方便,而且不公开使用所以直接hosts配置的,上面两个wordpress必须要hosts强制指向你之前配置api.wordpress.org的那个服务器ip地址。

好了,现在不出意外你打开你的wordpress速度会比较理想的,但是如果不理想,可以想想你的代理服务器是不是线路不好啊~

但是,你会发现升级插件的时候会提示你没有匹配的正式,downloads.wordpress.org的证书刚才没配置,只做了301跳转。

本来我为了完美,做个自签名证书做成https,但是被curl识别出了自签名证书没法通过。好,我又把我的自签名证书根证书ca.crt放在了wp-includes/certificates/ca-bundle.crt里面,但是依然识别是自签名证书,无奈!不知道是不是有大佬有解决方法,欢迎大佬提出!

四、最终解决方案

打开wp-includes/class-http.php

搜索public function request

解决wordpress(插件)更新失败 429等错误(有更新)

找到下面ssl配置

解决wordpress(插件)更新失败 429等错误(有更新)

这里改成false,跳过https证书检查,然后快乐的可以去更新插件,再也没有什么在维护中,什么更新失败:下载失败,Too Many Requests”的错误。

结语:

我在想是不是可以直接把api.wordpress.org反代官方的ip地址,这样就不需要再来个中间去301了,有空的时候试试,那样效率会不会高一点。还有证书的检查不知道有没有优雅的不需要修改代码的地方!有大佬有好的方案欢迎提出,我会热更!

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:4   其中:访客  2   博主  2

    • avatar Mashiro 1

      然而还是更新不了插件啊,点了更新插件按键以后报错 Update Failed: Download failed. A valid URL was not provided.

      • avatar Mashiro 1

        应该是换对了的。尝试过原域名301定向到其他域名,也尝试过原域名直接反代,但都是这个报错。文章里提到的 http://api.wordpress.org/core/version-check/1.7/? 以及 https://download.wordpress.org/release/wordpress-5.3.2.zip 忽略证书错误时都能正常访问。

        我这边api应该是正常工作的(能检测到更新),但是无法成功下载https://download.wordpress.org里的插件更新包(似乎也有单独的签名验证)
        就像确认一下您这边按照文章里的设置的确能下载插件的更新吗?

          • avatar echo少年 Admin

            @Mashiro 我知道了,需要validurl,你应该301到你的地址,而不是直接用你的源地址,还有你那个ssl为false改了么