Configuration
Le proxy se configure par variables d'environnement, toutes facultatives. Un fichier .env est chargé s'il existe.
| Variable | Valeur | Par défaut |
|---|---|---|
LOG_LEVEL | panic, fatal, error, warn, info, debug, trace | info |
PORT | nombre | 8080 |
METRICS_PORT | nombre | 9000 |
ENABLE_METRICS | booléen | true |
ENABLE_PPROF | booléen | false |
BUFFER_SIZE | nombre | 50 |
OUTBOUND_IP | adresse IP | vide |
BIND_IP | adresse IP | 0.0.0.0 |
DISCORD_URL | URL sans chemin | https://discord.com |
REQUEST_TIMEOUT | nombre (millisecondes) | 5000 |
CLUSTER_PORT | nombre | 7946 |
CLUSTER_MEMBERS | liste séparée par des virgules | vide |
CLUSTER_ADVERTISE_ADDR | adresse, nom d'hôte ou auto | vide |
CLUSTER_DNS | nom de domaine | vide |
MAX_BEARER_COUNT | nombre | 1024 |
DISABLE_HTTP_2 | booléen | true |
BOT_RATELIMIT_OVERRIDES | liste séparée par des virgules | vide |
DISABLE_GLOBAL_RATELIMIT_DETECTION | booléen | true |
Serveur
LOG_LEVEL
Niveau de journalisation, transmis tel quel à logrus.
PORT et METRICS_PORT
Ports sur lesquels le proxy écoute les requêtes et expose ses métriques.
ENABLE_METRICS et ENABLE_PPROF
Active les métriques (les désactiver réduit un peu la consommation) et le profilage.
BIND_IP
Adresse sur laquelle écoute le serveur HTTP, pour les requêtes comme pour les métriques. 127.0.0.1 n'accepte que les connexions locales, 10.0.0.42 seulement celles du réseau local.
BUFFER_SIZE
Taille des canaux Go qui ordonnent les requêtes. La réduire économise de la mémoire, mais une fois un canal plein, les requêtes se disputent la place suivante : en période de forte charge, une partie d'entre elles n'est plus envoyée dans l'ordre.
Discord
DISCORD_URL
Destination des requêtes, sous forme de schéma et d'hôte sans chemin. Sert à placer le proxy devant un simulateur de Discord ou un proxy d'enregistrement.
OUTBOUND_IP
Adresse locale depuis laquelle partent les requêtes vers Discord, par exemple 120.121.122.123.
REQUEST_TIMEOUT
Temps d'attente maximal d'une réponse de Discord, sans compter l'attente due aux limites. Au-delà, le proxy répond 408.
DISABLE_HTTP_2
Désactive HTTP/2 pour les requêtes vers Discord, à cause de quelques soucis du support HTTP/2 de Go. N'affecte pas le serveur du proxy.
MAX_BEARER_COUNT
Nombre maximal de files de jetons Bearer, gardées dans un cache LRU. Une requête n'est jamais interrompue quand sa file est évincée, mais une taille trop faible peut augmenter les 429 si un jeton a beaucoup de requêtes en attente.
Limite globale
BOT_RATELIMIT_OVERRIDES
Limite globale de requêtes par seconde, pour les bots dont Discord a relevé la limite. Sans cette variable, chaque bot est limité à 50, la valeur documentée par Discord.
Format : l'identifiant utilisateur du bot (pas celui de l'application) et sa limite, séparés par :, sans espace :
BOT_RATELIMIT_OVERRIDES=392827169497284619:100,227115752396685313:80
DISABLE_GLOBAL_RATELIMIT_DETECTION
À false, le proxy déduit la limite globale de /gateway/bot (50 pour une concurrence de 1, 500 pour 16, et une formule au-delà). Discord ne documente pas cette relation, et /gateway/bot est limité à 2 requêtes toutes les 5 secondes, dont les shards du bot ont besoin au démarrage : la détection est donc désactivée par défaut dans notre fork. Préférez BOT_RATELIMIT_OVERRIDES.
Cluster
Voir Haute disponibilité pour le fonctionnement.
CLUSTER_PORT
Port de communication avec les autres membres du cluster.
CLUSTER_MEMBERS
Membres connus du cluster, séparés par des virgules, avec un port facultatif (sinon CLUSTER_PORT). Inutile de tous les lister : les autres sont découverts par un protocole de gossip. Prend le pas sur CLUSTER_DNS.
CLUSTER_MEMBERS=10.0.0.2,10.0.0.3:7244
CLUSTER_DNS
Nom de domaine qui résout vers plusieurs membres du cluster, la méthode recommandée sur Kubernetes (avec un service headless, par exemple nirn-headless.default.svc.cluster.local). Le DNS ne transmet pas de port : tous les nœuds doivent alors utiliser le même CLUSTER_PORT.
CLUSTER_ADVERTISE_ADDR
Adresse que ce nœud annonce aux autres. Vide, memberlist la choisit seul, ce qui dans un conteneur peut donner une adresse injoignable. Indiquez une adresse IP, un nom d'hôte, ou auto pour prendre la première adresse IPv4 hors boucle locale.
Variables instables
DISABLE_401_LOCK
Le proxy bloque définitivement une file après une 401 en fonctionnement normal. Cette variable désactive ce blocage, mais pas sa journalisation. Elle peut disparaître à tout moment.