一个客户端更新原理是获取 http://example.com/latest.txt 里的数字版本号,如果大于当前版本号就后台下载 http://example.com/latest.exe ,如果下载失败就一直不停循环下载,多几个客户端循环下载服务器带宽就满了,需要实现限制这个文件单 IP 一小时只能下载 3 次,最方便的实现方法是什么?(不能用跳转,因为垃圾客户端不会追踪跳到哪里)
最好能用服务器上有的 php+Apache ,因为服务器的系统是 CentOS4.8 ,所有东西基本都要自己编译了不说,它的 uptime 快 9 年了,我很怕因为什么关机就起不来了。
不能读日志直接封 IP ,因为同域名下有很多 API ,旧版客户端也能用。
1
zzzzzzy 2022-12-22 14:24:35 +08:00
netty 限制每个客户端下载带宽
|
4
CodeSorcerer 2022-12-22 14:26:30 +08:00
apache 的 qos 模块? https://mod-qos.sourceforge.net/
|
5
XiLingHost 2022-12-22 14:26:57 +08:00
@edis0n0 java 不需要安装啊,你可以单独给个目录
|
6
edis0n0 OP @dailixin359 #4 刚看了下服务器上的是 Nginx 不是 Apache ,另外这个看起来是直接限速,不能限制一段时间内的下载次数
|
7
PerFectTime 2022-12-22 14:33:53 +08:00 1
提供一个思路,加一台服务器放在前面用你想用的软件和编译的东西
|
8
Lax 2022-12-22 15:15:45 +08:00 1
nginx rate limit 可以搞。但是你这个周期偏长了,要考虑这个 location 的请求量,周期内请求量越多,会消耗越多的内存来保存限流状态。
https://nginx.org/en/docs/http/ngx_http_limit_req_module.html |
9
GeorgeWai 2022-12-22 16:08:28 +08:00
考虑用 iptables 试试
|
10
nekoneko 2022-12-22 17:15:37 +08:00
写个 nginx 插件?
写个服务把现在的下载接管了, 在服务里面加逻辑? |
11
Jirajine 2022-12-22 17:47:02 +08:00
那就直接用 php 接管那两个路由,自己实现判断逻辑
|
13
FrankAdler 2022-12-22 21:21:06 +08:00 via iPhone
用你能解决的方式实现,然后把这部分流量转发过去(用你能做到的方式)
|
14
Jirajine 2022-12-22 22:41:03 +08:00
@edis0n0 nginx/Apache 加个 rewrite 规则,或者弄个 latest.exe.php 这样的 filesystem based route ,具体看 cgi 怎么配的。
|
15
yoloMiss 2022-12-22 23:38:15 +08:00
我理解你这个是否下载的判断是做在客户端的啊,那为什么不把这个单个小时内的下载次数限制也做在客户端呢?
|
17
zhensjoke 2022-12-23 09:58:37 +08:00
有没有可能把 latest.exe 改为一个语言脚本,比如 php ,
然后在里边写代码判断请求 IP 的,符合条件的返回 exe 数据流。 |
18
zhensjoke 2022-12-23 10:09:19 +08:00
配置 nginx 将*.exe 的请求交给 php 处理,
|
19
V1Eerie 2022-12-23 20:10:02 +08:00
可以使用 nginx 的 limit_req 模块来实现每小时的限制下载。
limit_req_zone $binary_remote_addr zone=one:10m rate=3r/h; 这将限制每个 IP 地址每小时进行 2=3 次下载请求。 参考链接: http://nginx.org/en/docs/http/ngx_http_limit_req_module.html 可以自己在调整一下参数。 |
20
jones2000 2022-12-24 00:09:49 +08:00
把升级包放到 CDN 上不就行了, 能用钱解决的事,不要用代码解决。回头 PPT 上写上使用分布式升级,高大上。
|
22
jones2000 2022-12-24 00:25:26 +08:00
@edis0n0 用CDN可以避免下载失败。选择就近的节点下载,成功率更高。除非客户端网络有问题,或者是升级包太大了, 如果是升级包太大,把升级包切成几个小文件,下载到本地以后再合并覆盖客户端。
|
23
jones2000 2022-12-24 00:36:09 +08:00
@edis0n0 如果是自建机房,升级服务器怎么可能是单台呢, 平时留3-4台做一个负载均衡,, 每次要上新版本是根据目前现在的客户量大致就可以算出高峰流量,提前调配好升级服务器和提升带宽,等升级高峰期过了,把多余的升级服务器下线,带宽就可以缩小。这些都是运维一个产品的基本的操作。
|