File

mod_limits/README.markdown @ 4738:5aee8d86629a

mod_bookmarks2: Fix handling of nick and password elements This form of child retrieval fails when the stanza elements internally don't have an 'xmlns' attribute, which can happen sometimes for some reason, including when they have been constructed via the stanza builder API. When that is the case then the explicit namespace arguemnt does not match the nil value of the internal attribute. Calling `:get_child()` without the namespace argument does the right thing here, with both nil and the parent namespace as valid values for the internal attribute.
author Kim Alvefur <zash@zash.se>
date Wed, 03 Nov 2021 21:11:55 +0100
parent 1820:8de50be756e5
child 4782:b935276ab1b4
line wrap: on
line source

---
labels:
- 'Stage-Beta'
summary: 'Connection-level rate limiting'
...

Introduction
============

On some servers, especially public ones, it is desired to make sure that
everyone gets their fair share of system resources (and no more).

mod\_limits allows you to specify traffic bandwidth limits, preventing
any single connection hogging the server's CPU, RAM and bandwidth.

Details
=======

mod\_limits detects when a connection has exceeded its traffic allowance
and temporarily ignores a connection. Due to the way TCP and the OS's
network API works no data is lost, only slowed.

Configuration
=============

Currently mod\_limits is configured per connection type. The possible
connection types are:

-   c2s
-   s2sin
-   s2sout
-   component

The limits are specified like so in the **global** section of your
config (they cannot be per-host):

``` {.lua}
limits = {
  c2s = {
    rate = "3kb/s";
    burst = "2s";
  };
  s2sin = {
    rate = "10kb/s";
    burst = "5s";
  };
}
```

All units are in terms of *bytes*, not *bits*, so that "kb/s" is
interpreted as "kilobytes per second", where a kilobyte is 1000 bytes.

Compatibility
=============

  ----- -------------------
  0.9   Works
  0.8   Doesn't work(\*)
  ----- -------------------

(\*) This module can be made to work in 0.8 if you do two things:

1.  Install
    [util.throttle](http://hg.prosody.im/0.9/raw-file/d46948d3018a/util/throttle.lua)
    into your Prosody source's util/ directory.
2.  If you use libevent apply [this
    patch](http://prosody.im/patches/prosody08-mod-limits-fix.patch) to
    net/server\_event.lua.