Some checks failed
Server CI / Postgres (shard 0) (push) Has been skipped
Server CI / Postgres (shard 3) (push) Has been skipped
BuildEnv Docker Image / build-image (push) Failing after 4s
BuildEnv Docker Image / build-image-fips (push) Failing after 4s
Migration Review & Release Notes / Generate migration review & release notes (push) Failing after 3s
Server CI / Build Environment (push) Failing after 3s
Server CI / Postgres (shard 1) (push) Has been skipped
Tools CI / check-style (mattermost-govet) (push) Failing after 4s
Server CI / Postgres (shard 2) (push) Has been skipped
Tools CI / check-style (mmgotool) (push) Failing after 3s
Server CI / Elasticsearch v8 Compatibility (push) Has been skipped
Server CI / OpenSearch v2 Compatibility (push) Has been skipped
Server CI / Postgres FIPS (shard 0) (push) Has been skipped
Tools CI / Test (mattermost-govet) (push) Failing after 3s
Server CI / Postgres FIPS (shard 1) (push) Has been skipped
Server CI / Postgres FIPS (shard 2) (push) Has been skipped
Tools CI / Test (mmgotool) (push) Failing after 3s
Server CI / Postgres FIPS (shard 3) (push) Has been skipped
Server CI / Run mmctl tests (push) Has been skipped
Server CI / Run mmctl tests (FIPS) (push) Has been skipped
Server CI / Merge Postgres Test Results (push) Has been skipped
Server CI / Merge Postgres FIPS Test Results (push) Has been skipped
Server CI / Check backport migrations (push) Has been skipped
Server CI / Check generated files (push) Has been skipped
Server CI / check-style (push) Has been skipped
Server CI / Vet API (push) Has been skipped
Server CI / Build mattermost server app (push) Has been skipped
Server CI / Server CI Complete (push) Failing after 2s
Server CI / Server CI Artifacts (push) Has been skipped
Server CI / Sentry Upload (push) Has been skipped
Server CI / Server CI Report (push) Failing after 5m1s
Server CI Nightly Race / Race Detector (push) Has been skipped
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Webapp CI Cache Warm / Warm Webapp node_modules Cache (push) Has been cancelled
E2E CI Cache Warm / Warm E2E npm Registry Cache (push) Has been cancelled
API / build (push) Has been cancelled
Web App CI / check-types (push) Has been cancelled
Web App CI / check-lint (push) Has been cancelled
Web App CI / check-i18n (push) Has been cancelled
Web App CI / check-external-links (push) Has been cancelled
Web App CI / test (platform) (push) Has been cancelled
Web App CI / test (mattermost-redux) (push) Has been cancelled
Web App CI / test (channels shard 1/4) (push) Has been cancelled
Web App CI / test (channels shard 2/4) (push) Has been cancelled
Web App CI / test (channels shard 3/4) (push) Has been cancelled
Web App CI / test (channels shard 4/4) (push) Has been cancelled
Web App CI / upload-coverage (push) Has been cancelled
Web App CI / build (push) Has been cancelled
YAML Lint / yamllint (push) Has been cancelled
Push mirrored docker images / cd/Push mirrored docker images (push) Has been cancelled
docs-cd / Build and deploy docs (push) Has been cancelled
Docs CI / build (push) Has been cancelled
E2E Cache Warm: Cypress deps / Warm Cypress deps cache (push) Has been cancelled
Scorecards supply-chain security / Scorecard analysis (push) Has been cancelled
Server CI Weekly / Postgres FIPS (push) Has been skipped
Server CI Weekly / Run mmctl tests (FIPS) (push) Has been skipped
Server CI Weekly / Postgres with binary parameters (push) Has been skipped
Server CI Weekly / Build Environment (push) Failing after 1s
Server CI Cache Warm / Warm Go Module and Build Cache (push) Failing after 2s
Server CI Nightly Race / Build Environment (push) Failing after 1s
119 lines
6.4 KiB
Plaintext
119 lines
6.4 KiB
Plaintext
---
|
||
title: "Enable rate limiting"
|
||
unlisted: true
|
||
---
|
||
{/* Snippet include: imported by environment-configuration-settings. */}
|
||
|
||
With self-hosted deployments, rate limiting prevents your Mattermost server from being overloaded with too many requests, and decreases the risk and impact of third-party applications or malicious attacks on your server.
|
||
|
||
Configure rate limiting settings by going to **System Console \> Environment \> Rate Limiting**, or by editing the `config.json` file as described in the following tables. Changes to configuration settings in this section require a server restart before taking effect.
|
||
|
||
<Important>
|
||
|
||
Mattermost rate limiting configuration settings are intended for small deployments of Mattermost up to a few hundred users, and is not intended for larger, Enterprise-scale deployments.
|
||
|
||
</Important>
|
||
|
||
<table>
|
||
<colgroup>
|
||
<col style={{width: '45%'}} />
|
||
<col style={{width: '54%'}} />
|
||
</colgroup>
|
||
<tbody>
|
||
<tr>
|
||
<td><p>Enable or disable rate limiting to throttle APIs to a specified number of requests per second.</p><ul><li><strong>true</strong>: APIs are throttled at the rate specified by the <a href="#maximum-queries-per-second">Maximum queries per second</a> configuration setting.</li><li><strong>false</strong>: <strong>(Default)</strong> API access isn’t throttled.</li></ul></td>
|
||
<td><ul><li>System Config path: <strong>Environment > Rate Limiting</strong></li><li><code>config.json</code> setting: <code>RateLimitSettings</code> > <code>Enable</code> > <code>false</code></li><li>Environment variable: <code>MM_RATELIMITSETTINGS_ENABLE</code></li></ul></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
# Maximum queries per second
|
||
|
||
<table>
|
||
<colgroup>
|
||
<col style={{width: '46%'}} />
|
||
<col style={{width: '53%'}} />
|
||
</colgroup>
|
||
<tbody>
|
||
<tr>
|
||
<td><p>Throttle the API at this number of requests per second when <a href="#enable-rate-limiting">rate limiting</a> is enabled.</p><p>Numerical input. Default is <strong>10</strong>.</p><p>Increase this value to accept more requests each second, and decrease this value to allow fewer requests.</p></td>
|
||
<td><ul><li>System Config path: <strong>Environment > Rate Limiting</strong></li><li><code>config.json</code> setting: <code>RateLimitSettings</code> > <code>PerSec</code> > <code>10</code></li><li>Environment variable: <code>MM_RATELIMITSETTINGS_PERSEC</code></li></ul></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
# Maximum burst size
|
||
|
||
<table>
|
||
<colgroup>
|
||
<col style={{width: '45%'}} />
|
||
<col style={{width: '54%'}} />
|
||
</colgroup>
|
||
<tbody>
|
||
<tr>
|
||
<td><p>The maximum number of requests allowed beyond the per second query limit when <a href="#enable-rate-limiting">rate limiting</a> is enabled.</p><p>Numerical input. Default is <strong>100</strong>.</p><p>Increase this value to allow for more concurrent requests to be handled, and decrease this value to limit this capacity.</p></td>
|
||
<td><ul><li>System Config path: <strong>Environment > Rate Limiting</strong></li><li><code>config.json</code> setting: <code>RateLimitSettings</code> > <code>MaxBurst</code> > <code>100</code></li><li>Environment variable: <code>MM_RATELIMITSETTINGS_MAXBURST</code></li></ul></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
# Memory store size
|
||
|
||
<table>
|
||
<colgroup>
|
||
<col style={{width: '43%'}} />
|
||
<col style={{width: '56%'}} />
|
||
</colgroup>
|
||
<tbody>
|
||
<tr>
|
||
<td><p>The maximum number of user sessions connected to the system as determined by vary rate limit settings when <a href="#enable-rate-limiting">rate limiting</a> is enabled.</p><p>Numerical input. Default is <strong>10000</strong>. Typically set to the number of users in the system.</p><p>We recommend setting this value to the expected number of users. A higher value may result in underutilized resources, and a lower value may result in user sessions/tokens expiring too frequently.</p></td>
|
||
<td><ul><li>System Config path: <strong>Environment > Rate Limiting</strong></li><li><code>config.json</code> setting: <code>RateLimitSettings</code> > <code>MemoryStoreSize</code> > <code>10000</code></li><li>Environment variable: <code>MM_RATELIMITSETTINGS_MEMORYSTORESIZE</code></li></ul></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
# Vary rate limit by remote address
|
||
|
||
<table>
|
||
<colgroup>
|
||
<col style={{width: '43%'}} />
|
||
<col style={{width: '56%'}} />
|
||
</colgroup>
|
||
<tbody>
|
||
<tr>
|
||
<td><p>Configure Mattermost to rate limit API access by IP address when <a href="#enable-rate-limiting">rate limiting</a> is enabled.</p><ul><li><strong>true</strong>: <strong>(Default)</strong> Rate limit API access by IP address. Recommended when using a proxy.</li><li><strong>false</strong>: Rate limiting does not vary by IP address.</li></ul></td>
|
||
<td><ul><li>System Config path: <strong>Environment > Rate Limiting</strong></li><li><code>config.json</code> setting: <code>RateLimitSettings</code> > <code>VaryByRemoteAddr</code> > <code>true</code></li><li>Environment variable: <code>MM_RATELIMITSETTINGS_VARYBYREMOTEADDR</code></li></ul></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
# Vary rate limit by user
|
||
|
||
<table>
|
||
<colgroup>
|
||
<col style={{width: '45%'}} />
|
||
<col style={{width: '54%'}} />
|
||
</colgroup>
|
||
<tbody>
|
||
<tr>
|
||
<td><p>Configure Mattermost to rate limit API access by authentication token or not when <a href="#enable-rate-limiting">rate limiting</a> is enabled.</p><ul><li><strong>true</strong>: Rate limit API access by user authentication token. Recommended when using a proxy.</li><li><strong>false</strong>: <strong>(Default)</strong> Rate limiting does not vary by user authentication token.</li></ul></td>
|
||
<td><ul><li>System Config path: <strong>Environment > Rate Limiting</strong></li><li><code>config.json</code> setting: <code>RateLimitSettings</code> > <code>VaryByUser</code> > <code>false</code></li><li>Environment variable: <code>MM_RATELIMITSETTINGS_VARYBYUSER</code></li></ul></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
# Vary rate limit by HTTP header
|
||
|
||
<table>
|
||
<colgroup>
|
||
<col style={{width: '45%'}} />
|
||
<col style={{width: '54%'}} />
|
||
</colgroup>
|
||
<tbody>
|
||
<tr>
|
||
<td><p>Configure Mattermost to vary rate limiting API access by the HTTP header field specified. Recommended when you’re using a proxy.</p><ul><li>When configuring NGINX, set this to <strong>X-Real-IP</strong>.</li><li>When configuring AmazonELB, set this to <strong>X-Forwarded-For</strong>.</li></ul></td>
|
||
<td><ul><li>System Config path: <strong>Environment > Rate Limiting</strong></li><li><code>config.json</code> setting: <code>RateLimitSettings</code> > <code>VaryByHeader</code> > <code>""</code></li><li>Environment variable: <code>MM_RATELIMITSETTINGS_VARYBYHEADER</code></li></ul></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|