Nginx 能不能实现按域名限制网速?

47 天前
 waringid
Nginx 对外映射 80 和 443 端口,Nginx 对应的宽带线路是 100M (上下行对等),通过反向代理配置域名( hostname )的方式映射到后端服务器。类似于:
a.example.com -> 192.168.1.10:3000
b.example.com -> 192.168.2.10:8900

想要实现的效果:
a.example.com 限制访问带宽为 2M (外网访问,不限制访问 192.168.1.10 )
b.example.com 限制访问带宽为 3M (外网访问)
其它的域名不限制

尝试过的方案:
1 、防火墙或网关限制(只能基于 IP 限制,而且不灵活)
2 、Nginx 自带的访问频率和访问速率控制 (有一定效果,不够灵活并且如果是已建立的连接,限制带宽操作不生效,需要断开本次连接,重新再连时才生效)

各位大佬有没有更灵活的实现方案推荐?
1807 次点击
所在节点    NGINX
11 条回复
i4t
47 天前
上思科,3 层交换,可以设置限速,Nginx 基本上做不到精确限速
waringid
47 天前
@i4t 我是需要对访问 a.example.com 这样的客户端源 IP 限速(有 2 个限定条件:1 是访问域名 a.example.com 的这个客户端 IP ,2 是判断如果是访问这个域名就对这个客户的外网 IP 进行限速),3 层交换更多是对内网 IP
nieqibest
47 天前
去 nginx 上提个 issue 试试
fenglangjuxu
47 天前
上 openresty 看有啥插件可用的
waringid
47 天前
@fenglangjuxu 用过 openresty 的一些插件,也没有匹配到合适的。特别是针对云盘下载已建立连接的这种无法按要求限制网速。我在想是不是 Nginx 是 7 层应用,而针对网络限速的是四层的原因,所以无法做到有效的限制。

按这个理解有没有可以通过 Nginx 和 防火墙(或网关)联动的配置案例?
fenglangjuxu
47 天前
能改配置 一个连接的时间超时变短么 强制重开链接 这样就算超了 时间很短
waringid
47 天前
@fenglangjuxu 基于 Nginx 这类的 HTTP 协议不行,在原理上它无法对已经建立连接的链路重置(如果是服务端主动发起重置请求则需要更改后端应用,这个就不具备普适性)
wheat0r
46 天前
前置国产下一代防火墙之类的设备,一般都有很复杂的限速功能
waringid
46 天前
@wheat0r 主要是想了解有没有实现这样需求的成功案例。和防火墙联动肯定是可以实现这样的特性,但是怎么样配置对接?有哪些坑和难点?需要有清晰的认知
cnoder
46 天前
waringid
46 天前
@cnoder 这个是最早尝试的方法,达不到要求有 2 个原因:
1 、默认无法基于被访问的域名判断(当然可以通过 openresty lua 代码读取 $host 和 X-Real-IP ,但如果配置的二级域名较多或者是经常变化就很难动态调整)
2 、最大的问题是已经建立的连接无法实现网速的限制(频率控制也不够平缓,有延迟并且突发的峰值对整体网络有影响)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1086681

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX