使用nginx反向代理到webman后,下载文件失败

楚羽幽

问题描述

使用webman做服务端远程下载,客户端用php去请求这个接口下载远程的文件,没有下载完就报错了
客户端使用IP+端口方式进行请求下载就没问题,使用nginx代理下载就会被断开

程序代码

服务端代码

$data = json_decode($data, true);
$file = base_path("/version/{$data['version_name']}.zip");
if (!file_exists($file)) {
return $this->fail("{$data['version_name']} 版本更新包不存在");
}
// 返回文件
return response()->file($file);

nginx配置

upstream of {
  # HPAdmin HTTP Server 的 IP 及 端口
  server 127.0.0.1:39150;
  keepalive 1024000;
}

location / {
        # 将客户端的 Host 和 IP 信息一并转发到对应节点
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # 转发Cookie,设置 SameSite
        proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
        # 关闭重试机制
        proxy_next_upstream off;
        proxy_buffering off;
        proxy_buffer_size 500M;
        proxy_buffers 60 500M;
        proxy_busy_buffers_size 500M;
        proxy_temp_file_write_size 500M;

        # 跨域请求
        if ($request_method = OPTIONS) {
            add_header Access-Control-Allow-Origin $http_origin; # 必须要有
            add_header Access-Control-Allow-Headers *; # 必须要有
            add_header Access-Control-Allow-Methods "GET,POST,PUT, DELETE,OPTION"; # 不加也行
            #add_header Access-Control-Allow-Credentials true; # 不加也行
            return 200; # 204也可以,只要返回成功码即可
        }
        if ( -f $request_uri) {
          proxy_pass http://of;
          break;
        }

        # 允许静态资源转发
        location ~ .*\.(js|css|jpg|jpeg|gif|png|ico|pdf|txt)$ {
          proxy_pass http://of;
          break;
        }
        # 执行代理访问真实服务器
        if ( !-e $request_filename ){
            proxy_pass http://of;
          break;
        }
    }

报错信息

cURL error 18: transfer closed with 9329091 bytes remaining to read (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)

nginx网站日志

1.116.41.3 - - [01/Jun/2023:11:23:46 +0800] "GET /api/SystemUpdate/detail?version=126&version_name=v1.2.6 HTTP/1.1" 200 190 "//kf.hangpu.net/admin/Index/updateCheck" "GuzzleHttp/7"
1.116.41.3 - - [01/Jun/2023:11:23:56 +0800] "GET /api/SystemUpdate/getKey?target_version=128 HTTP/1.1" 200 78 "//kf.hangpu.net/admin/Index/updateCheck" "GuzzleHttp/7"
1.116.41.3 - - [01/Jun/2023:11:24:12 +0800] "GET /api/SystemUpdate/getZip?key=f59efa3bbb6a41a66ead1a553296f554 HTTP/1.1" 200 18874368 "//kf.hangpu.net/admin/Index/updateCheck" "GuzzleHttp/7"
1.116.41.3 - - [01/Jun/2023:11:25:34 +0800] "GET /api/SystemUpdate/detail?version=126&version_name=v1.2.6 HTTP/1.1" 200 190 "//kf.hangpu.net/admin/Index/updateCheck" "GuzzleHttp/7"
1.116.41.3 - - [01/Jun/2023:11:25:36 +0800] "GET /api/SystemUpdate/getKey?target_version=128 HTTP/1.1" 200 78 "//kf.hangpu.net/admin/Index/updateCheck" "GuzzleHttp/7"
1.116.41.3 - - [01/Jun/2023:11:25:51 +0800] "GET /api/SystemUpdate/getZip?key=9a82a133f3432d58f2b081e0b72052be HTTP/1.1" 200 18874368 "//kf.hangpu.net/admin/Index/updateCheck" "GuzzleHttp/7"
818 1 0
1个回答

walkor

是不是 nginx 配置完没restart重启?

  • 楚羽幽 2023-06-01

    nginx重启了,webman也停止然后重新启动了

  • 楚羽幽 2023-06-01

    下载的文件大概有50M左右,但只下载了10M左右就断开停止了,用IP+端口的方式进行curl请求下载就没问题

  • walkor 2023-06-01

    webman停止了当然就下载失败了

  • 楚羽幽 2023-06-01

    我的意思是,我手动把webman停止,然后在启动的,怕平滑重启没有进行加载到配置

  • walkor 2023-06-01

    看下nginx日志

  • 楚羽幽 2023-06-01

    好的,我看看

  • 楚羽幽 2023-06-01

    似乎看了日志好像并没有出现报错啥的,都是正常请求

  • walkor 2023-06-01

    ningx 错误日志,一般是error.log

  • 楚羽幽 2023-06-01

    日志已贴上

  • walkor 2023-06-01

    还有 keepalive 1024000; 太高了,10240 差不多了,最好不要高于30000

  • 楚羽幽 2023-06-01

    好的,哈哈哈,因为我下载的文件通常是20-150M左右,我以为要设置高的这个

🔝