使用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)
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"
是不是 nginx 配置完没restart重启?
nginx重启了,webman也停止然后重新启动了
下载的文件大概有50M左右,但只下载了10M左右就断开停止了,用IP+端口的方式进行curl请求下载就没问题
webman停止了当然就下载失败了
我的意思是,我手动把webman停止,然后在启动的,怕平滑重启没有进行加载到配置
看下nginx日志
好的,我看看
似乎看了日志好像并没有出现报错啥的,都是正常请求
ningx 错误日志,一般是error.log
日志已贴上
还有 keepalive 1024000; 太高了,10240 差不多了,最好不要高于30000
好的,哈哈哈,因为我下载的文件通常是20-150M左右,我以为要设置高的这个