Recherche de site Web

Comment définir les délais d’expiration des requêtes HTTP sous Linux


En tant qu’utilisateur Linux avec plus de 10 ans d’expérience, je comprends l’importance d’optimiser votre système pour les performances et la fiabilité. Une tâche courante qui apparaît dans les serveurs Web et la gestion des applications est le contrôle des requêtes HTTP.

Plus précisément, la définition d’un délai d’expiration pour les requêtes HTTP peut aider à empêcher votre système de se bloquer ou d’attendre indéfiniment une réponse d’un serveur.

Dans ce guide, je vais vous guider à travers les étapes de délai d’expiration des requêtes HTTP sous Linux, en couvrant les différents outils et configurations que vous pouvez utiliser pour vous assurer que votre système fonctionne correctement.

Qu’est-ce qu’un délai d’expiration de requête HTTP ?

Un délai d’expiration d’une requête HTTP se produit lorsqu’un client (tel qu’un navigateur ou un script) envoie une requête à un serveur, mais que le serveur ne répond pas dans un délai spécifié, ce qui peut être dû à un serveur trop lent, surchargé ou insensible. Dans ce cas, le client cessera d’attendre et renverra un message d’erreur ou de délai d’expiration.

Les délais d’expiration sont essentiels pour s’assurer que votre système ne gaspille pas de ressources à attendre des réponses de serveurs qui ne répondent pas. En définissant des délais d’expiration appropriés, vous pouvez éviter les retards, améliorer les performances et éviter les charges inutiles sur votre serveur.

Pourquoi définir des requêtes HTTP timeout ?

Il est important de définir des délais d’expiration pour les requêtes HTTP pour plusieurs raisons :

  • Évitez la surcharge du serveur : les requêtes HTTP de longue durée peuvent empêcher votre serveur de répondre ou de le surcharger, en particulier lorsqu’il y a plusieurs demandes.
  • Améliorer les performances du système – En définissant un délai d’expiration, vous pouvez vous assurer que votre système n’attend pas trop longtemps une réponse, ce qui permet de garder vos ressources libres pour d’autres tâches.
  • Meilleure gestion des erreurs – Les délais d’expiration permettent à votre système d’échouer correctement lorsqu’un serveur ne répond pas, plutôt que de se bloquer indéfiniment.
  • Sécurité – Limiter le temps passé à attendre une réponse peut aider à atténuer le risque de certains types d’attaques, telles que les attaques par déni de service (DoS).

Méthodes de définition des requêtes HTTP de délai d’expiration sous Linux

Il existe plusieurs outils et méthodes disponibles sous Linux pour gérer les délais d’expiration des requêtes HTTP, explorons les plus courants.

1. Utilisation de curl pour le délai d’expiration des requêtes HTTP

curl est un outil en ligne de commande utilisé pour transférer des données via des URL, qui prend en charge un large éventail de protocoles, y compris HTTP, et vous permet de définir des délais d’expiration pour vos requêtes.

Pour définir un délai d’expiration dans curl, utilisez l’option --max-time, qui spécifie la durée maximale (en secondes) que curl autorisera pour l’ensemble de l’opération (y compris la connexion, le transfert de données, etc.). Une fois ce délai dépassé, curl abandonnera la demande.

curl --max-time 10 https://example.com

Dans cet exemple, curl attendra un maximum de 10 secondes pour une réponse de https://example.com. Si le serveur ne répond pas dans ce délai, curl mettra fin à la requête et renverra une erreur.

2. Définition des délais d’expiration dans le serveur HTTP Apache

Si vous utilisez un serveur web comme Apache, vous pouvez configurer les délais d’expiration directement dans son fichier de configuration (httpd.conf ou apache2.conf).

Apache dispose de deux paramètres de délai d’expiration principaux :

  • Délai d’attente – Cette directive définit le temps maximum pendant lequel le serveur attendra une demande complète du client.
  • ProxyTimeout – Ceci est utilisé lorsqu’Apache agit en tant que proxy inverse et attend une réponse d’un serveur backend.

Pour définir la directive Timeout dans Apache, ouvrez le fichier de configuration Apache et définissez la valeur de Timeout in seconds.

Timeout 60

Cela signifie qu’Apache attendra un maximum de 60 secondes pour qu’une requête soit terminée. Si cela prend plus de temps, le serveur renverra une erreur de délai d’expiration.

De même, si vous utilisez Apache comme proxy inverse, vous pouvez définir la directive ProxyTimeout :

ProxyTimeout 30

Cela fixe le temps maximum d’attente d’Apache pour une réponse du serveur backend à 30 secondes.

3. Configuration de Nginx pour le délai d’expiration HTTP

Nginx est un autre serveur Web populaire, et il fournit également plusieurs directives pour contrôler les délais d’expiration.

  • client_header_timeout – Définit le délai d’expiration pour la lecture de l’en-tête de la demande du client.
  • client_body_timeout – Définit le délai d’expiration pour la lecture du corps du client.
  • send_timeout – Définit le délai d’envoi des données au client.
  • proxy_read_timeout – Définit le délai d’expiration pour la lecture d’une réponse à partir d’un serveur proxy.

Pour configurer les délais d’expiration dans Nginx, ouvrez le fichier de configuration de Nginx (nginx.conf) et définissez les valeurs de délai d’expiration souhaitées.

http {
    client_header_timeout 10s;
    client_body_timeout 10s;
    send_timeout 10s;
    proxy_read_timeout 30s;
}

Cette configuration garantit que Nginx n’attendra pas plus de 10 secondes pour les données du client et 30 secondes pour une réponse d’un serveur proxy.

4. Utilisation de wget pour le délai d’expiration des requêtes HTTP

Comme curl, wget est un autre outil en ligne de commande utilisé pour télécharger des fichiers à partir du Web, qui prend également en charge la définition de délais d’expiration.

Pour définir un délai d’attente dans wget, utilisez l’option --timeout, qui spécifie le temps maximum (en secondes) pendant lequel wget attendra une réponse du serveur.

wget --timeout=15 https://example.com/file.zip

Cette commande indique à wget d’attendre un maximum de 15 secondes pour une réponse avant d’abandonner la demande.

5. Délais d’attente dans PHP et autres langages de script

Si vous utilisez PHP ou un autre langage de script côté serveur, vous pouvez également définir des délais d’expiration pour les requêtes HTTP effectuées dans vos scripts.

En PHP, vous pouvez utiliser la fonction ini_set pour configurer la directive max_execution_time, qui définit la durée maximale d’exécution d’un script.

ini_set('max_execution_time', 30); // 30 seconds

6. Délais d’expiration dans les paramètres réseau à l’échelle du système

Pour les paramètres de délai d’expiration à l’échelle du système, vous pouvez configurer les valeurs de délai d’expiration de la connexion TCP à l’aide de la commande sysctl. Ces paramètres contrôlent le temps d’attente de votre système pour qu’une connexion TCP soit établie ou fermée.

Pour définir le délai d’expiration de la connexion TCP, vous pouvez modifier les paramètres suivants dans /etc/sysctl.conf :

  • net.ipv4.tcp_fin_timeout – Définit le temps pendant lequel le système attendra la fermeture d’une connexion.
  • net.ipv4.tcp_keepalive_time : définit le temps entre les sondes keepalive.
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 600

Après avoir modifié le fichier, exécutez la commande suivante pour appliquer les modifications :

sysctl -p
Conclusion

La définition des délais d’expiration des requêtes HTTP sous Linux est une tâche essentielle pour gérer les performances, la sécurité et la fiabilité du serveur.

Que vous utilisiez des outils en ligne de commande tels que curl et wget, ou que vous configuriez des serveurs Web comme Apache ou Nginx, vous pouvez facilement contrôler le temps maximum pendant lequel votre système attendra une réponse d’un serveur.

Articles connexes: