直接使用 NGINX 作为反向代理来加速 Docker Hub 镜像的下载,确实在某些情况下更好,资源占用更小,效率更高。以下是一些优点:
优点
- 更低的资源占用:
- NGINX 本身是一个高性能、轻量级的 Web 服务器,占用的资源较少。
- 不需要额外运行 Docker Registry 容器,从而减少内存和 CPU 使用。
- 简化的配置:
- 直接配置 NGINX 反向代理,无需额外配置 Docker Registry,整体配置更简单。
- 不需要为 Docker Registry 设置存储和持久化配置。
- 更高的效率:
- 由于省去了 Docker Registry 的中间层,反向代理直接处理 Docker Hub 请求,减少了请求的中转时间。
- NGINX 可以高效地处理大量并发连接,提供快速的响应。
配置步骤
回顾一下之前的配置步骤,确保完整性和清晰性:
1. 安装 NGINX
确保安装 NGINX:
- Debian/Ubuntu:
sudo apt-get install nginx
- CentOS/RHEL:
sudo yum install nginx
2. 配置 NGINX 反向代理
编辑或创建 /etc/nginx/nginx.conf
:
server {
listen 80;
listen [::]:80;
server_name docker.example.com;
return 301 https://docker.example.comrequest_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name docker.example.com;
charset utf-8;
ssl_certificate /path/fullchain.cer;
ssl_certificate_key /path/docker.example.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
# 允许指定 IP 地址访问
allow xxxxxxxx;
deny all;
proxy_pass https://registry-1.docker.io;
proxy_set_header Host registry-1.docker.io;
proxy_set_header X-Real-IPremote_addr;
proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Protoscheme;
# 关闭缓存
proxy_buffering off;
proxy_request_buffering off;
# 转发认证相关
proxy_set_header Authorization http_authorization;
proxy_pass_header Authorization;
# 对 upstream 状态码检查,实现 error_page 错误重定向
proxy_intercept_errors on;
recursive_error_pages on;
# 根据状态码执行对应操作,以下为301、302、307状态码都会触发,这个最关键
error_page 301 302 307 = @handle_redirect;
# 错误页面处理
error_page 502 = /502.html;
}
location @handle_redirect {
resolver 1.1.1.1;
setsaved_redirect_location 'upstream_http_location';
proxy_passsaved_redirect_location;
}
# 错误页面
location = /502.html {
root /usr/share/nginx/html;
internal;
}
}
3. 重启 NGINX
重启 NGINX 服务以应用配置:
sudo systemctl restart nginx
4. 配置 Docker 使用自建加速器
在 Docker 客户端上,编辑或创建 /etc/docker/daemon.json
文件:
{
"registry-mirrors": ["https://your_domain_or_ip"]
}
重启 Docker 服务:
sudo systemctl restart docker
通过这些步骤,你可以使用 NGINX 作为反向代理来加速 Docker Hub 镜像的下载,并实现身份验证和镜像白名单功能。这种方法更适合资源有限的环境,同时保持高效的性能。