解决Nginx反向代理Harbor时大镜像拉取失败的问题


解决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;
    }
}