全球主机交流论坛

标题: 急救:nignx怎么对网站或者目录或者IP进行带宽限制? [打印本页]

作者: gdtv    时间: 2009-11-14 12:30
标题: 急救:nignx怎么对网站或者目录或者IP进行带宽限制?
弄了个图片站,现在20多mb/s了,要死人了
分几种情况
1、服务器上有很多个站,怎么才能只限制某个站的?
2、怎么才能只限制某个站某个目录的?
3、怎么才能针对来访问者IP限制带宽?
作者: cpuer    时间: 2009-11-14 12:33
标题: 回复 1# 的帖子
IIS有这个功能,其他的我都不清楚。
作者: kok    时间: 2009-11-14 12:37
GOOGLE 一下有很多教程

——————————————
使用nginx的标准模块ngx_http_limit_zone_module,进行会话的并发连接数控制:
http {
    limit_zone   one $binary_remote_addr 10m;
#定义一个叫“one”的记录区,总容量为 10M,以变量 $binary_remote_addr 作为会话的判断基准(即一个地址一个会话)
    ...
    server {
        ...
        location /attachments/ {
            limit_conn   one 1;
            limit_rate 100k;
        }
# 限制 /attachments/ 目录下,一个会话只能进行一个连接。超过一个,则返回503。imit_rate 来控制该目录的下载速度。
}


这是简单的nginx的方案,更高级的应用应该是在客户端类型或者根据日志分析后,针对具体问题做文章,例如对$http_user_agent的特殊内容进行匹配,然后返回503。

为什么要返回503?如果直接返回403,有可能被下载工具发现,403的状态被认为被禁止了,然后进行调整继续作案。而返回一个503,对服务器来说影响不大,只占用一个nginx的线程而已。
作者: kok    时间: 2009-11-14 12:38
http://wiki.nginx.org/NginxChs
NGINX 中文文档
作者: cpuer    时间: 2009-11-14 12:42
标题: 回复 3# 的帖子
通过限制连接数来变相限制带宽。
作者: gdtv    时间: 2009-11-14 12:42
“一个会话只能进行一个连接。超过一个,则返回503”
如果一个页面上有10个图,打开这个页面,是不是只能显示一个图,其他图都显示X?
我想针对一个来访者IP限制一个连接,就是说其他9个图不会显示X,而是一个一个地下载,可否呢?
作者: 网络寄生虫    时间: 2009-11-14 12:43
你把图片分页啊  一个图片一页
作者: gdtv    时间: 2009-11-14 12:45
limit_rate 100k;
是针对所有人的还是针对一个IP的?
作者: gdtv    时间: 2009-11-14 13:00
好像不起作用
作者: cpuer    时间: 2009-11-14 13:01
标题: 回复 8# 的帖子
Limit_rate

语法:limit_rate speed

默认值:no

Context:http,server,location

用来限制服务器对客户的应答传输速率,速率是B/S,此限制仅对一个连接有效,如果客户发起两个连接,速率将会是高于限制的两倍。

服务器级别上限制用户部分的速度很有必要,那么,禁用limit_rate就不合适了,此时可以使用$limit_rate,通过指定这个变量的值来实现此功能。
案例:
server{
                if($slow){
                            set $limit_rate 4k;
}
}
作者: gdtv    时间: 2009-11-14 13:08
我靠,天下文章一大抄害死人
limit_rate不能限制目录的速度,只能限制整个网站的速度,所以放在location /attachments/ {}里面是不起作用的。
作者: gdtv    时间: 2009-11-14 13:14
limit_conn   one 1; 这个很不好用,多于一个连接,不是等待、然后依次连接,而是直接Kill掉。
所以如果一个页面有多个图片,只能显示一个了
作者: ABC    时间: 2009-11-14 13:14
流量大是好事情啊,为什么要限速啊
作者: lemss    时间: 2009-11-14 13:17
标题: 回复 10# 的帖子
这个很有用
作者: cpuer    时间: 2009-11-14 13:31
原帖由 gdtv 于 2009-11-14 13:08 发表
我靠,天下文章一大抄害死人
limit_rate不能限制目录的速度,只能限制整个网站的速度,所以放在location /attachments/ {}里面是不起作用的。


是的,location没用,只能用在server里面,看到有个人是这么说的。
作者: cpuer    时间: 2009-11-14 13:32
原帖由 ABC 于 2009-11-14 13:14 发表
流量大是好事情啊,为什么要限速啊


嘿嘿,我也是这么想的。
作者: gdtv    时间: 2009-11-14 13:45
原帖由 cpuer 于 2009-11-14 13:01 发表
Limit_rate

语法:limit_rate speed

默认值:no

Context:http,server,location

用来限制服务器对客户的应答传输速率,速率是B/S,此限制仅对一个连接有效,如果客户发起两个连接,速率将会是高于限制的两倍。

服务器级别上限 ...

C大这个从哪里找来的?有没有更详细的说明?$slow是怎么定义的?
作者: cpuer    时间: 2009-11-14 13:47
标题: 回复 17# 的帖子
http://wiki.nginx.org/NginxChsHttpCoreModule

详细的东西比较少,这个也是nginx的弱项。
作者: gdtv    时间: 2009-11-14 13:49
标题: 回复 19# 的帖子
用apache慢死了,所以我才用nginx
作者: gdtv    时间: 2009-11-14 13:55
标题: 回复 21# 的帖子
你就当我是心理作用吧
作者: gdtv    时间: 2009-11-14 13:58
原帖由 cpuer 于 2009-11-14 13:01 发表
Limit_rate

语法:limit_rate speed

默认值:no

Context:http,server,location

用来限制服务器对客户的应答传输速率,速率是B/S,此限制仅对一个连接有效,如果客户发起两个连接,速率将会是高于限制的两倍。

服务器级别上限 ...


[emerg]: unknown "slow" variable
作者: cpuer    时间: 2009-11-14 14:04
标题: 回复 24# 的帖子
看来还要在哪去定义下 $slow
作者: zyypp    时间: 2009-11-14 14:33
ngx_http_limit_zone_module
这个模块是限制并发连接数的
不能真正的起到限速的作用 只是变相的 限制连接数从而减少带宽 或者采集
作者: zyypp    时间: 2009-11-14 14:34
原帖由 gdtv 于 2009-11-14 13:14 发表
limit_conn   one 1; 这个很不好用,多于一个连接,不是等待、然后依次连接,而是直接Kill掉。
所以如果一个页面有多个图片,只能显示一个了


对的 呵呵 这个 对于下载有用处 图片站 不建议开启
作者: cpuer    时间: 2009-11-14 14:46
原帖由 zyypp 于 2009-11-14 14:33 发表
ngx_http_limit_zone_module
这个模块是限制并发连接数的
不能真正的起到限速的作用 只是变相的 限制连接数从而减少带宽 或者采集


是的,最好把图片访问专门的服务器,不会影响web页面打开。
作者: gdtv    时间: 2009-11-14 14:51
原帖由 zyypp 于 2009-11-14 14:33 发表
ngx_http_limit_zone_module
这个模块是限制并发连接数的
不能真正的起到限速的作用 只是变相的 限制连接数从而减少带宽 或者采集


现在还没解决
1、如果用limit_conn,那么多余的图片会显示X,而不是排列等待下载
2、如果用limit_rate,那么空闲的时候limit_rate不能自动调整,浪费
现在只有寄望于if($slow){set $limit_rate 4k;},可是不知这个怎么弄。
作者: cpuer    时间: 2009-11-14 15:00
标题: 回复 29# 的帖子
如果你限制速度的话打开那个网站速度会很慢的。
作者: cpuer    时间: 2009-11-14 15:08
原帖由 gdtv 于 2009-11-14 13:58 发表
[emerg]: unknown "slow" variable


看下nginx.conf server段配置详情。

直接写 limit_rate 8k; 不用判断看看。
作者: zyypp    时间: 2009-11-14 15:31
原帖由 gdtv 于 2009-11-14 14:51 发表


现在还没解决
1、如果用limit_conn,那么多余的图片会显示X,而不是排列等待下载
2、如果用limit_rate,那么空闲的时候limit_rate不能自动调整,浪费
现在只有寄望于if($slow){set $limit_rate 4k;},可是不知这个怎么弄。 ...


limit_conn 是限制并发数的 就像是IIS的连接限制一样 超过了限制就是返回503之类
limit_rate 具体你可以看http://wiki.nginx.org/NginxHttpCoreModule然后查询 limit_rate  我贴一边
limit_rate
syntax: limit_rate speed

default: no

context: http, server, location, if in location

Directive assigns the speed of transmission of the answer to client. Speed is assigned in the bytes per second. Limitation works only for one connection, i.e., if client opens 2 connections, then total velocity will be 2 times higher then the limit set.

If it is necessary to limit speed for the part of the clients at the server level, based on some kind of condition - then this directive does not apply. Instead you should specify the limit by assigning the value to the $limit_rate variable, as shown below:
  1. server {
  2.   if ($slow) {
  3.     set $limit_rate  4k;
  4.   }
  5. }
复制代码
limit_rate_after
syntax: limit_rate_after time

default: limit_rate_after 1m

context: http, server, location, if in location

The directive limits speed only after the first part was sent.
  1. limit_rate_after 1m;
  2. limit_rate 100k;
复制代码


不过我以前对以下载试过 在location中limit_rate无效(内网测试)
server {
  if ($slow) {
    set $limit_rate  4k;
  }
}
这个我没试验过 呵呵
作者: cpuer    时间: 2009-11-14 15:51
标题: 回复 32# 的帖子
location 有很多人说过无效,只能放server段里面,

limit_rate 10k;

这样就行了吧。
作者: gdtv    时间: 2009-11-14 16:13
标题: 回复 33# 的帖子
这样可以
作者: zyypp    时间: 2009-11-14 16:15
标题: 回复 33# 的帖子

作者: cpuer    时间: 2009-11-14 16:22
原帖由 gdtv 于 2009-11-14 16:13 发表
这样可以

那样估计打开你的网站会非常慢,特别是图片。
作者: gdtv    时间: 2009-11-14 16:26
if ($slow) 这个条件不知怎么弄
作者: lemss    时间: 2009-11-14 16:30
标题: 回复 37# 的帖子
应该是判断服务器本身或者网络的负载情况,如果负载比较多的话就使用limit_rate进行带宽限制。

至于如何去判断,暂时没发现nginx有这方面的资料
作者: gdtv    时间: 2009-11-14 16:32
标题: 回复 38# 的帖子
对,现在问题就是:如何去判断
作者: cpuer    时间: 2009-11-14 16:40
标题: 回复 39# 的帖子
找遍nginx网站,没看到$slow的具体说明。
作者: zyypp    时间: 2009-11-14 16:49
没用过 帮不上忙了 呵呵




欢迎光临 全球主机交流论坛 (https://www.iloc.eu.org/) Powered by Discuz! X3.4