WP官网出现429错误无法打开怎么办,使用nginx反向代理实现国内镜像访问
从10月底开始起,wordpress.org及其下属的所有国家语言的子域名包括cn.wordpress.org在国内均无法正常访问,并不是被墙给屏蔽了(这样直接就直接404打不开了而不是一会能看一会不能看)也不是官方从服务器端屏蔽了国内IP的访问(那样报的是403禁止访问错误,跟新浪图床的封锁是一样的,本文最后有最新的新浪图床封锁外链后的下载与浏览历史图片的方法),因为有时能打开有时打不开,打不开时会提示一个429 Too Many Requests的nginx错误。这是因为wp的官网是采用CDN+反向代理技术来指挥全球访客连接到官网服务器的,而每个地区所连接的CDN和边缘服务器与wp的目标服务器均不同,因为当时面向中国大陆和港澳台地区的CDN与边缘服务器遭到了不明身份的CC攻击,直接将所有接受大陆和港澳台请求的那台服务器打瘫痪了,而官方又没有针对此次事件增加专门的防护,所以最终只能所有国内用户集体买单,无法访问WP官网下载程序和安装主题插件。
所以最终我们看到服务器几近崩溃,所以就会出现429错误。429错误其实大意就是服务器遭到了不明原因的短时持续不间断的攻击,为了保护服务器不被继续攻击搞垮所采取的保护性停止访问的指令。
429 Too Many Requests
HTTP 429 Too Many Requests
响应状态码指示用户在给定时间内发送了太多请求(“限速”)。
一个Retry-After
标题可能包括该回复表示多久作出新的请求前等待。
状态
429 Too Many Requests
示例
HTTP/1.1 429 Too Many Requests Content-Type: text/html Retry-After: 3600
规范
规范 |
标题 |
---|---|
RFC 6585,第4节:429太多的请求 |
其他HTTP状态码 |
https://cloud.tencent.com/developer/section/1190189
以上是腾讯云帮助文档对429错误的解释,如果想要了解更多关于429错误的信息可以自己去搜索引擎搜索
今天我们不详细探究429错误是怎么回事,CDN与边缘服务器以及所连接到的目标服务器之间的连接被攻击是怎么攻击的这我们也不去详细研究。我们只研究一件事情,现在官网国内根本就没法用,经常性的429不开飞机根本就打不开(这种情况只能挂代理,进入到代理所在的网络环境内这样才能被分配到可用的CDN与目标服务器,从而实现正常访问),国内服务器建站的也会因为无法访问官网以及API无法连接到官网而造成主题插件和程序升级困难,需要手动自行下载后上传安装费时费力。每次上官网下程序主题插件的都得要科学上网这也不是个办法,访问网站还好要是下载后再上传太麻烦了,该怎么解决这个问题呢?
其实要想让国内能直接访问WP官网,这可比富强上网要容易的多。无非就是两种方法:正向代理与反向代理
正向代理就是科学上网,在这里不再多说,别告诉我你不会开飞机。不会的话你又是怎么富强的呢?
而今天我们要为大家介绍的是nginx反向代理,只需一个域名(不能用在国内注册的域名,更不能用cn域名)一台境外VPS(必须境外VPS,国内的也访问不了要他何用)即可实现在国内以镜像的方式直接墙内访问官网并在线下载,绕过那台已经被打瘫的CDN边缘服务器。(有部分图片视频或者富媒体内容可能会无法访问,如果需要访问效果或者更好的浏览体验请直接正向代理富强上网)
假设现在官网已经被封,我们就可以使用反代来实现这种无法访问的网站直连访问。使用反向代理其实还可以代理其他任意的被封的网站,如果你不怕自己域名被封那就试一试。如果你怕的话那就反代WP这种没被封却无法访问的网站,这种方法也可以反代由网站方面自己屏蔽国内IP的网站,实现用另一个能访问国家的代理去访问的方法,总之反向代理只要你掌握了就不怕无法访问网站了,直接做个镜像,搞定一切。
还记得之前我们介绍过cloudcone控制台无法访问后国内有人建了一个镜像( https://www.zzygx.cc/?p=564 文章最后的那个国内可用镜像),那就是用nginx反向代理建立的,只要接下来你按照我说的去操作,小白自己也可以制作一个只有你自己使用的cloudcone控制台镜像自己用,也包括WP官网的镜像,谁都可以被镜像。
这与我们之前介绍过的 zmirror镜像自动搭建工具,一键搭建网站镜像 跟这个大同小异,因为zmirror也是反向代理,只是它是高级的反代可以防止被谷歌识别为机器人这种高级的反向代理
首先需要准备一台境外的VPS与一个域名(免费付费均可,建议在国外注册,千万不要在国内注册,实名制与备案你懂得)
为什么要境外VPS呢,国内VPS跟咱们的网络环境是一模一样的,自己都无法访问了如何反代啊,建议使用日本、新加坡、美国、欧洲等地的VPS,只要不是国内与港澳台的VPS就行
我们以反代WP简体中文官网cn.wordpress.org为例,为大家介绍下面的操作流程,我们用wp.zzygx.ml域名作为反代后的域名
当一切准备好之后开始反向代理,非常简单,分三步
第一步,域名解析。使用域名注册商NS服务器的到你注册域名的地方添加解析,如果NS服务器是在其他地方如dnspod、cloudflare的那就到所在的解析平台去将域名提前解析到你的VPS服务器的IP地址上,记住是你小鸡的IP地址上面,添加A记录解析到VPS服务器的公网IP地址上面,域名解析完毕之后开始第二步。(注意一定要提前解析,如果你要反代的镜像是HTTPS的则必须要有一个免费SSL证书才能让被反代的镜像运转起来)
第二步,安装nginx。这一步如果是大神可以自行编译安装,考虑到编译安装的复杂性,这里推荐安装 军哥LNMP一键安装包 https://lnmp.org/ 一定要安装lnmp,就是最后安装后缀是lnmp结尾的,详细的安装过程请访问主站。由于是做反代因此无需安装数据库,由于nginx需要php-fpm模块,因此就算不用PHP也必须得安装PHP,安装php 5.3版本这种低版本即可,等待大约30分钟左右即可安装完成。
安装完毕则开始进行最后一步,添加vhost虚拟主机反代网站
接下来在SSH中输入命令 lnmp vhost add 创建一个虚拟主机,输入你刚才解析好的那个域名,然后按照提示进行操作,伪静态规则输入y,下面可以忽略的直接默认,没有必要的全部输入n。需要注意那个安装SSL证书那里,如果是HTTP网站不用安装输入n直接创建虚拟主机,如果是HTTPS的网站则需要输入y安装SSL证书,如果有证书并已经上传到服务器的按1,如果没有并想要使用免费SSL证书的请输入2自动安装3个月免费续签的免费证书。
接下来按下任意键开始安装,安装完成后虚拟主机就创建完成了。
接下来的步骤就是重点了,因为需要你重写虚拟主机的配置文件
怎么重写?没那么难,有一个模板,按照模板填好了该填的内容一切都OK
打开SFTP找到 /usr/local/nginx/conf/vhost/刚才创建的需要用作代理的域名.conf 的虚拟主机配置文件,删除全部内容重写配置文件(建议对原配置文件进行备份以免发生问题导致出现其他不可挽回的后果)
本文以反代WP简体中文官网为例子,下面的代码中cn.wordpress.org代表被反代的网站,wp.zzygx.ml代表用来反代的自己的域名,需要反代其他网站的请将出现这两部分的内容改成自己的域名与真正被反代的网站域名即可,需要反代WP官网的只需将用来反代的域名改成自己的就行
如果是HTTP的镜像请输入下面的内容然后保存上传即可(不建议用记事本编写,建议使用可道云等代码编辑器工具编写)
server { listen 80; server_name wp.zzygx.ml; if ($http_user_agent ~* (baiduspider|360spider|haosouspider|googlebot|soso|bing|sogou|yahoo|sohu-search| yodao|YoudaoBot|robozilla|msnbot|MJ12bot|NHN|Twiceler)) { return 403; } location / { sub_filter cn.wordpress.org wp.zzygx.ml; sub_filter_once off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Referer http://cn.wordpress.org; proxy_set_header Host cn.wordpress.org; proxy_pass http://cn.wordpress.org; proxy_set_header Accept-Encoding ""; } }
考虑到现在大多都是HTTPS的网站,因此大部分时候都得需要下面这个方法,申请一个证书然后代理HTTPS的网站,比如今天所讲的代理WP官网
如果是HTTPS的镜像,首先打开原来的虚拟主机配置文件,将下面的内容复制出来,粘贴到其他的文本文档中
ssl on; ssl_certificate /usr/local/nginx/conf/ssl/wp.zzygx.ml/fullchain.cer; ssl_certificate_key /usr/local/nginx/conf/ssl/wp.zzygx.ml/wp.zzygx.ml.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5"; ssl_session_cache builtin:1000 shared:SSL:10m; # openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048 ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem; add_header Strict-Transport-Security "max-age=31536000";
就是自己域名的SSL证书部分,这里千万别照着我们实验室的模板填写否则会出错,一定要复制自己域名的全部证书配置内容。然后再将这个内容复制到下面的8-19行中,然后改好配置文件保存重新上传即可
server { listen 80; listen 443 ssl; server_name wp.zzygx.ml ; index index.html index.htm index.php default.html default.htm default.php; root wp.zzygx.ml; ssl on; ssl_certificate /usr/local/nginx/conf/ssl/wp.zzygx.ml/fullchain.cer; ssl_certificate_key /usr/local/nginx/conf/ssl/wp.zzygx.ml/wp.zzygx.ml.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5"; ssl_session_cache builtin:1000 shared:SSL:10m; # openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048 ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem; add_header Strict-Transport-Security "max-age=31536000"; if ( $scheme = http ){ return 301 https://$server_name$request_uri; } if ($http_user_agent ~* (baiduspider|360spider|haosouspider|googlebot|soso|bing|sogou|yahoo|sohu-search| yodao|YoudaoBot|robozilla|msnbot|MJ12bot|NHN|Twiceler)) { return 403; } location / { sub_filter cn.wordpress.org wp.zzygx.ml; sub_filter_once off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Referer https://cn.wordpress.org; proxy_set_header Host cn.wordpress.org; proxy_pass https://cn.wordpress.org; proxy_set_header Accept-Encoding ""; } }
详细的配置文件范本请前往实验室下载站获取 https://www.zzygx.cc/DirectoryLister-master/
虚拟主机反代配置的详情可参考 https://www.cccitu.com/1590.html & https://wangejiba.com/1590.html
查看nginx状态,CentOS 6 输入 service nginx status / CentOS 7 输入 systemctl status nginx
然后保存并上传到此目录中,此时请在SSH中输入 nginx -t 命令测试nginx配置是否正确,如果显示 fail 则代表有错误此时请一定不要重启nginx,赶紧找错误修改直到修改正确为止或者将之前的配置文件备份重新上传回去,否则nginx将无法启动,就再也开不开了。如果显示OK或者 successful / successfully 则代表配置文件成功,接下来只需输入 /etc/init.d/nginx restart 重启一下nginx,只要nginx再次运行后接下来打开浏览器只要配置内容填写正确不出意外就能看到奇迹,我们已经正式的用镜像反向代理了这个网站,到这里WP官网就可以在国内继续正常打开了,不用富强了。再也不用担心会出现429问题了,下载也恢复了。虽然域名显示的是你的域名但实际上仍是显示被代理的网站(WP官网)的全部内容,因此被代理的网站有什么你的域名就能显示什么就能做什么,因此将WP官网的全部内容只要改成你配置的域名就能使用。
到这里WP的镜像反代就做完了,很简单吧。如果你想要在国内越过429直接访问那么用这个办法最简单最一劳永逸,还等什么赶快做一个自己的WP官网镜像吧,做镜像反代你也可以。
我们实验室也做了一个反代WP官网 https://wp.zzygx.ml/ 内容并不是全的只是简单的可以浏览文本内容、下载程序与主题插件,如果需要全的请自行科学上网。如果实在没法使用官网也没有富强工具的话可以使用本镜像反代临时应急,记住这只是个测试版,为了更好的效果请自己动手去做自己的。
(说回到本文开头所讲的新浪图床最新可用方法)
近期实验室查到了一个新浪图床的备用地址,可方便下载之前保存的历史图片。不能用做外链只能对原来保存在新浪图床的图片进行在线浏览查看与下载转移,方法很简单只需将文件链接前面的域名改为tva1/2/3/4.sinaimg.com即可,数字无所谓不过为了方便查找还是建议后面的数字与原链接的数字保持一致,此方法仅用作下载取出被封的图片和浏览历史图片所用,不能用做外链,否则这扇大门也将被关闭无法再取出了!!!