Module Apache mod_ratelimit : rate limit:error : rl: conn aborted

Ce module fournit un filtre RATE_LIMIT pour limiter la bande passante des clients, il semblerait qu’il soit utilisé chez PHPNET.ORG.

J’ai du mal à comprendre l’erreur, voici un exemple :

[mutu0312] [Tue Jan 03 18:34:12.710507 2017] [ratelimit:error] [pid 26451] [client 131.253.26.254:53732] AH01454: rl: conn aborted, referer: https://www.cyber-neurones.org/2015/10/spartan-race-le-castellet-la-trifecta-dans-le-weekend/

L’historique des erreurs sur mes sites :

grep "limit:error" error.log.201701* | grep "conn aborted" | awk '{print $4 " " $3}' | sort -n | uniq -c
   6 03 Jan
  11 04 Jan
  12 05 Jan
   7 06 Jan
   6 07 Jan
   5 08 Jan
  12 09 Jan
  14 10 Jan
   7 11 Jan
   9 12 Jan
   8 13 Jan
   5 14 Jan
   7 15 Jan
   8 16 Jan
  15 17 Jan
  11 18 Jan
   9 19 Jan
  10 20 Jan
   7 21 Jan

Si je regarde le source sous SVN :

static apr_status_t
rate_limit_filter(ap_filter_t *f, apr_bucket_brigade *input_bb)
{
    apr_status_t rv = APR_SUCCESS;
    rl_ctx_t *ctx = f->ctx;
    apr_bucket *fb;
    int do_sleep = 0;
    apr_bucket_alloc_t *ba = f->r->connection->bucket_alloc;
    apr_bucket_brigade *bb = input_bb;

    if (f->c->aborted) {
        ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, f->r, APLOGNO(01454) "rl: conn aborted");
        apr_brigade_cleanup(bb);
        return APR_ECONNABORTED;
    }

J’ai l’impression que le client coupe la connexion avant que le ratelimit n’ait eu le temps de faire un calcul … à suivre, pour l’instant l’occurence est faible.

Une réflexion sur « Module Apache mod_ratelimit : rate limit:error : rl: conn aborted »

  1. Si j’ai bien compris le fonctionnement du module (qui n’est pas très documenté ni correctement commenté) : Le flag aborted de conn_rec (qui signifie que le client à fermé la connexion) n’est pas défini par le module ratelimit et ce dernier arrête de traiter la requête si la connexion est en état aborted, il en profite pour envoyant l’information dans le log d’erreur.

    Ce message d’erreur n’est donc pas le fait du module mais ce dernier remonte l’information que la connexion à été coupée par le client, information qui n’est pas loggué si le module n’est pas chargé.

    Si l’analyse est correcte, cela signifie que ces connexions atteignent le timeout au niveau des load-balancers (timeout de la connexion vers le backend, le serveur HTTPD qui traite la requête) ou que la connexion soit fermée en amont par le client.

    Une autre possibilité est que cela soit mod_ssl qui mettes le flag aborted en cas de problèmes lors des échanges SSL.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Time limit is exhausted. Please reload CAPTCHA.