解决Nginx反向代理Harbor时大镜像拉取失败的问题
问题现象
在使用Docker部署的Nginx作为Harbor镜像仓库反向代理时,当拉取15GB大型镜像会出现连接中断,观察发现Nginx容器在此期间意外重启。
关键配置优化
1. 消除传输体积限制
client_max_body_size 0; # 允许无限大小的客户端请求体
proxy_request_buffering off; # 禁用代理层请求缓存(直传后端)
- 作用:避免413 Request Entity Too Large错误,防止Nginx缓存大文件请求导致内存溢出。
2. 超时参数扩展
keepalive_timeout 6000; # 长连接保持6000秒
client_body_timeout 6000; # 客户端上传数据超时阈值
- 原因:大型镜像分层传输耗时较长,默认超时设置(通常60秒)会导致连接被强行终止。
3. 代理缓冲机制优化
proxy_buffering off; # 禁用响应内容缓冲
proxy_max_temp_file_size 0; # 禁止使用临时磁盘文件
- 影响:数据直接从Harbor后端流式传输到客户端,避免Nginx缓冲过大的请求体。
完整配置片段
server {
listen 443 ssl;
server_name reg.example.com;
ssl_certificate cert/example.crt;
ssl_certificate_key cert/example.key;
# 传输控制核心参数
client_max_body_size 0;
proxy_request_buffering off;
keepalive_timeout 6000;
client_body_timeout 6000;
location / {
proxy_pass http://backend:8089;
proxy_set_header Host host;
proxy_set_header X-Real-IPremote_addr;
proxy_buffering off;
proxy_max_temp_file_size 0;
}
}