脚下时光博客

常用、分享、学习

  • 博主:键盘上游荡
  • QQ:点击这里给我发消息
  • 微信:xia_bq
  • 业务:建站,二开,运维
AD
【腾讯云】云产品限时秒杀,爆款2核4G云服务器首年74元
文章目录

Jfrog服务器出现拉取失败

xiabq 2025-06-09 14:02:34 点滴记忆 0

故障问题

公司内部服务器出现拉取失败问题,有一个1.2G的包,下载到1G左右85%就会中断

由于内部服务器都是通过nginx服务器进行了中转,检查了jfrog的磁盘状态都正常,问题出现在代理服务器上。

解决方案

在代理服务器修改nginx的缓存配置,常规需要修改3个地方,一个是超时配置,一个缓存大小和请求大小配置,修改后重载配置,就能下载大于1G的文件了

  location / {
        proxy_read_timeout  900; # Nginx 向后端发送请求数据的超时时间
        proxy_pass_header   Server;
        proxy_cookie_path   ~*^/.* /;
        if ( $request_uri ~ ^/artifactory/(.*)$ ) {
            proxy_pass http://jfrog-artifactory-server/artifactory/$1;
        }
        proxy_pass http://jfrog-artifactory-server/artifactory/;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;

        proxy_connect_timeout 90;
        proxy_send_timeout 90;
        proxy_buffer_size 4k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;

        proxy_max_temp_file_size 2048m; # 允许缓存最大2G文件

        client_max_body_size 4096m; #客户端请求服务器最大允许大小
    }

延展说明:

以下是 Nginx 中proxy_read_timeout、proxy_send_timeout和proxy_connect_timeout的对比与配置指南,涵盖作用、默认值及典型场景:


------


1. proxy_connect_timeout


作用:Nginx 与后端服务器建立 TCP 连接的超时时间(从发起连接到完成三次握手)。


默认值:60秒


典型场景:


  • 后端服务负载过高或网络拥塞时,建立连接可能超时。


  • 建议值:


      • 内部网络:5-15秒(低延迟环境)


      • 跨地域/高延迟网络:15-30秒


  • 错误表现:Nginx 返回502 Bad Gateway(连接后端失败)。


------


2. proxy_send_timeout


作用:Nginx 向后端发送请求数据的超时时间(从发送完请求头到发送完请求体的总时间)。


默认值:60秒


典型场景:


  • 客户端上传大文件(如视频、镜像)时,发送时间可能较长。


  • 建议值:


      • 普通请求:30-60秒


      • 大文件上传:根据带宽和文件大小计算(如 1GB 文件在 10Mbps 带宽下需约15分钟,即900秒)。


  • 错误表现:Nginx 关闭连接,客户端可能看到504 Gateway Timeout。


------


3. proxy_read_timeout


作用:Nginx 从后端读取响应数据的超时时间(从建立连接到接收完响应的时间)。


默认值:60秒


典型场景:


  • 后端处理耗时操作(如复杂计算、数据库查询)。


  • 建议值:


      • API 接口:30-60秒


      • 长任务接口:300秒+(需与后端服务超时策略对齐)


  • 错误表现:Nginx 返回504 Gateway Timeout(后端响应超时)。


------


三者的关系与配置示例


请求处理流程:


客户端 → Nginx → (1) 建立连接 → (2) 发送请求 → (3) 接收响应 → 客户端


  • (1) proxy_connect_timeout:控制步骤 1


  • (2) proxy_send_timeout:控制步骤 2


  • (3) proxy_read_timeout:控制步骤 3


配置示例:


【nginx】

 location /upload/ {

    proxy_pass http://backend_server;

    proxy_connect_timeout 15s;   # 15秒内完成连接建立

    proxy_send_timeout    900s;  # 允许15分钟发送大文件

    proxy_read_timeout    120s;  # 等待后端响应最长2分钟

}


------


注意事项


  1. 全局协调:超时配置需与后端服务一致(如 Tomcat 的connectionTimeout、Spring 的server.servlet.context-timeout)。


  2. 资源占用:过长的超时会占用 Nginx 工作进程的连接池,影响并发能力。


  3. 动态调整:


      • 对慢速客户端可单独设置client_body_timeout和client_header_timeout。


      • WebSocket 场景需额外配置proxy_http_version 1.1和proxy_set_header Upgrade。


  4. 测试验证:


      • 使用curl -v或压测工具(如 JMeter)模拟超时场景。


      • 监控 Nginx 的error.log,观察upstream timed out相关日志。


------


总结

【表格】

 参数    阶段    默认值    典型调整场景    

proxy_connect_timeout    建立连接    60s    网络高延迟、后端负载高    

proxy_send_timeout    发送请求    60s    大文件上传、慢客户端    

proxy_read_timeout    接收响应    60s    后端处理耗时任务

-------------------------

  1. Nginx 代理的缓存机制
    Nginx 作为代理服务器时,处理大文件下载有两种模式:

    • 内存缓冲:默认使用内存缓存响应数据(受 proxy_buffer_size 和 proxy_buffers 限制)

    • 磁盘缓冲:当内存不足时,启用磁盘临时文件(受 proxy_temp_path 和 proxy_max_temp_file_size 控制)

  2. 关键限制参数

    • proxy_max_temp_file_size默认值为 1G
      这是最可能的故障点!当文件超过设定值时,Nginx 会中断传输。




  • 分享: