使用Nginx加速访问docker hub

背景

之前通过nginx加速访问docker hub,在拉取镜像的时候出现 GET /v2/ HTTP/1.1" 401 87 是由于auth.docker.io 也被限制访问了,所以需要对其反代。

配置

最新配置如下:

#反代docker hub镜像源
server {
	 listen 443 ssl;
	 server_name 域名;

	 ssl_certificate 证书地址;
	 ssl_certificate_key 密钥地址;

	 ssl_session_timeout 24h;
	 ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
	 ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

	 location /v2/ {
			 proxy_pass https://registry-1.docker.io;  # Docker Hub 的官方镜像仓库
			 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;

			 # 重写 www-authenticate 头为你的反代地址
			 proxy_hide_header www-authenticate;
			 add_header www-authenticate 'Bearer realm="https://域名/token",service="registry.docker.io"' always;
			 # always 参数确保该头部在返回 401 错误时无论什么情况下都会被添加。

			 # 对 upstream 状态码检查,实现 error_page 错误重定向
			 proxy_intercept_errors on;
			 # error_page 指令默认只检查了第一次后端返回的状态码,开启后可以跟随多次重定向。
			 recursive_error_pages on;
			 # 根据状态码执行对应操作,以下为301、302、307状态码都会触发
			 error_page 301 302 307 = @handle_redirect;

	 }
	 
	 # 处理 Docker OAuth2 Token 认证请求
	 location /token {
		 resolver 1.1.1.1 valid=600s;
		 proxy_pass https://auth.docker.io;  # Docker 认证服务器

		 # 设置请求头,确保转发正确
		 proxy_set_header Host auth.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;

		 # 传递 Authorization 头信息,获取 Token
		 proxy_set_header Authorization $http_authorization;
		 proxy_pass_header Authorization;

		 # 禁用缓存
		 proxy_buffering off;
	 }
	 
	 location @handle_redirect {
			 resolver 1.1.1.1;
			 set $saved_redirect_location '$upstream_http_location';
			 proxy_pass $saved_redirect_location;
	 }
}

参考文章

Docker HubDocker 官方的注册中心,提供了一个存储和分享 Docker 镜像的平台。如果你想访问 Docker Hub 并获取、推送镜像或者创建个人仓库,可以按照以下步骤操作: 1. **安装 Docker**:首先确保你的计算机上已经安装了 Docker,可以从 Docker 的官方网站下载适用于你操作系统的版本。 2. **登录 Docker Hub**:打开命令行终端,运行 `docker login` 命令。输入你的 Docker ID(通常是邮箱地址)和密码,首次登录可能会提示你创建一个 GitHub 或者 Google 账户关联。 ```sh docker login ``` 3. **搜索镜像**:在终端中,使用 `docker search` 命令搜索你需要的镜像。例如,搜索 nginx 镜像: ```sh docker search nginx ``` 4. **拉取镜像**:找到你需要的镜像后,运行 `docker pull` 命令下载镜像。比如拉取官方的 nginx 镜像: ```sh docker pull nginx:latest ``` 5. **构建自定义镜像**:如果你需要创建自己的镜像,可以使用 `docker build` 命令,配合 Dockerfile 文件来构建。确保 Dockerfile 存在一个目录下,然后运行 `docker build -t <your_username>/<image_name> .`。 6. **推送镜像**:如果你有权限,可以将本地镜像推送到 Docker Hub使用 `docker push` 命令,例如: ```sh docker push your_username/nginx:latest ``` 7. **管理个人仓库**:在 Docker Hub 网站上,你可以查看和管理你的私有仓库,包括上传镜像、创建标签、设置访问权限等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值