nginx反向代理docker hub,加速拉取镜像
前几天写了利用免费的cloudflare workers 解决docker无法拉取镜像的问题,但是cloudflare速度太慢,对于部分网络不好的童鞋拉取镜像速度偏慢,这里就利用服务器+nginx反向代理docker hub,实现不限速拉取镜像。
实际上上一期《cloudflare workers 解决docker无法拉取镜像问题》本质也是反向代理,只是用了cloudflare免费的服务罢了,但对于部分地区的童鞋而言虽然能拉取镜像了,但是速度慢的很(cf访问速度是这样的),利用nginx反向代理看的就是自己服务器的速度了,如果服务器速度足够快,跑满自己的宽带速度都不是问题。
什么是反向代理?“反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端做任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。”以上这段话出自百度百科,总之就是通过访问反代服务器来访问其他的网站。目前反向代理的服务有很多,这里就用nginx来实现,其他的例如caddy等都可以,这里就不介绍,感兴趣的童鞋可以自己百度。
一、所需工具
1.一台海外云服务器。什么,没有服务器?前几期也有写试用gcp,azure、aws、甲骨文等等都有免费的服务器,相关内容可以自行google。也可以选择购买服务器,这就不多说,看上啥买啥就行了,系统要选择linux类的,注意云服务器物理位置需要在海外,国内云也是拉取不了镜像的。
还有一点需要注意,反向代理后拉取docker的速度取决于自己到服务器的速度,所以如果服务器速度很慢,那还不如选择用cloudflare。
2.一个域名,域名相关内容可以翻看往期文章。且需要把域名提前解析到服务器对应的ip上。
二、部署宝塔面板
这一步仅仅是针对小白,如果熟悉nginx,也可以自己手搓nginx配置,当然也可以选择其他的类似面板,用宝塔无非就是有个web界面,配置起来很方便,本质上和手搓nginx配置并无区别。而且不同版本的linux安装nginx命令还都有些不一样,甚至配置文件目录也可能也都不一样,为了通用性本篇只以宝塔为例。
在root环境下用一键脚本安装宝塔:
if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh ed8484bec
安装完成之后会生成宝塔登录地址和账号密码,如果无法访问需要先去服务器控制台安全组放行对应端口,系统内部的防火墙也需要放行。
外网面板地址: http://127.0.0.1:9999/55dc0c66 #放行9999端口,宝塔登录地址
内网面板地址: http://127.0.0.1:9999/55dc0c66
username: aaaaa #宝塔账户
password: bbbbb #宝塔账户密码
然后就可以登录到宝塔面板,如果无法打开,记得检查防火墙。首次登录宝塔后会弹出安装对应的环境,我们这只需要用到nginx,所以单独安装nginx就行(安装推荐的版本就行),其他的不用安装。
三、配置nginx
当建立好网站后可以给反向代理添加一个ssl,实现https访问,要比http安全很多。点击刚刚建立好的网站-设置,进入ssl,选择Let's Encrypt,选定自己的域名,点击确定,等待几秒钟就可以获取到ssl证书,然后再顺带启用强制https。
再进入配置文件,拉到最下面,在最后一个“}”符号前面插入以下代码(文中的代码和图的代码是一致的,只是我删去了注释):
location / {
proxy_pass https://registry-1.docker.io;
proxy_set_header Host registry-1.docker.io;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
proxy_set_header Authorization $http_authorization;
proxy_pass_header Authorization;
proxy_intercept_errors on;
recursive_error_pages on;
error_page 301 302 307 = @handle_redirect;
}
location @handle_redirect {
resolver 1.1.1.1;
set $saved_redirect_location '$upstream_http_location';
proxy_pass $saved_redirect_location;
}
确认以上无误,就可以点击保存,至此完成了nginx反代docker hub的配置。此时访问自己的域名就会显示“404 page not found”,这个是正常的,但如果无法访问自己的域名,那请检查是否放行了443和80端口。
四、验证并拉取镜像
如果以上步骤都无误,就可以直接拉取docker镜像,但是需要对相应的拉取命令做更改。
1.常规拉取镜像
例如原拉取命令如下:
docker pull library/alpine:latest
那就需要在前面加上自己的域名:
docker pull 自己的域名/library/alpine:latest
当然也可以直接设置docker registry,替换成自己的域名即可:
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://自己的域名"]
}
EOF
2.nas拉取镜像
如果是用的nas,以威联通为例,可以直接在添加docker时候选择高级模式,输入自己的域名来拉取docker;也可以在存储库中添加对应的registry,注意供应商要选择其他,url要填写完整(带https),之后在创建容器的时候选择对应的存储库就行。
3.其他
其他系统或者设备参照上面的方法修改对应的源(registry)就行。
如果配置无误,就可以正常下载镜像了。
五、其他
1.反向代理取决于服务器的速度,所以如果服务器速度太慢,建议换个服务器。
2.反向代理也需要消耗服务器的流量,但是一般情况下个人使用不会消耗太多,如果服务器成本太高,可以多个人合租也行。
3.不要随意把访问地址告诉他人,不然服务器被攻击或者被刷流量,损失的的是自己,并且建议做好防护措施。
4.最后可以在后台回复“fddc”获取我已经搭建好的反向代理服务,但仅供测试,随时会关闭服务。