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.
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.