web-dev-qa-db-fra.com

Rediriger les visiteurs lorsque le site est trop occupé

Nous nous attendons à une forte augmentation du trafic sur notre site Web cette semaine. Si le site est surchargé (c'est-à-dire que les visiteurs obtiennent une erreur 503), je souhaite rediriger les visiteurs vers une autre adresse Web. Comment pourrais-je m'y prendre?

7
SamTheMan

Lorsque votre site Web est trop occupé en raison d'un trafic important, le meilleur moyen de redirection consiste à utiliser des documents d'erreur personnalisés. Ainsi, lorsqu'un utilisateur reçoit le code d'erreur 503, le serveur redirige les visiteurs vers la page de document d'erreur personnalisée que vous avez définie.

Il existe différentes manières pour différents serveurs de personnaliser les pages de documents d'erreur.

1. Pour le serveur Apache , ajoutez le code suivant dans le fichier .htaccess.

ErrorDocument 503 http://example.com/maintenance.html

2. Pour IIS 7 serveur , ajoutez le code suivant dans web.config

<system.webServer>
    <httpErrors errorMode="Custom" existingResponse="Replace">
        <remove statusCode="503" />
        <error statusCode="503" responseMode="Redirect" 
               path="http://example.com/maintenance.htm" />
    </httpErrors>
</system.webServer>

Réf. CustomError dans web.config

3. Pour le serveur Tomcat 7 , ajoutez le code suivant dans le fichier WEB-INF/web.xml.

<error-page>
    <error-code>503</error-code>
    <location>/Error.jsp</location>
</error-page>

<error-page>
    <exception-type>Java.lang.Exception</exception-type>
    <location>/Error.jsp</location>
</error-page>

Réf. Page d'erreur personnalisée dans Tomcat 7

10
Nikhil Supekar

Il semble que vous visiez le deuxième pire résultat. Si vous attendez un pic, vous avez le temps de faire quelque chose:

  • Implémentation de la mise en cache dans le code (peut être facile, peut prendre un certain temps pour arriver à bien)
  • Optimisez les fichiers statiques (jpegoptim, optipng, more-css, etc.) pour réduire la bande passante et accélérer les choses pour tous les utilisateurs.
  • Déplacez votre contenu statique sur un CDN pour supprimer complètement ces demandes de votre réseau.
  • Si tout est statique, copiez le site sur quelques ordinateurs supplémentaires et utilisez un équilibreur de charge pour conserver le site sous une adresse IP. Cela semble cher, mais de nombreux fournisseurs VPS vous donneront une configuration comme celle-ci pour environ 20 $ par semaine.
  • Ou regardez les services de mise en cache frontaux CloudFlare (et autres). Même un novice peut les implémenter en quelques minutes, mais cela n’aidera pas beaucoup si vous avez un site très dynamique.

Préparez simplement les choses pour que vous sachiez que si les choses se détériorent, vous avez tout mis en œuvre pour vous assurer que ces utilisateurs obtiendraient ce qu'ils voulaient la première fois. Planifier pour échouer n’est pas une mauvaise pratique, mais regardez les options pour éviter d’échouer en premier lieu!

Mais oui, la meilleure option standard (que vous auriez déjà dû implémenter) consiste à personnaliser vos pages d'erreur afin que les utilisateurs sachent que quelque chose ne va pas. Je dois souligner que la plupart des gens réagissent très négativement à ces problèmes. Si le message est "veuillez revenir plus tard", attendez-vous à ce qu'une fraction de fraction ne soit renvoyée.

Encore une fois, c’est une occasion idéale pour revoir la façon dont le site est hébergé et si rien d’autre n’a un plan [expérimenté] pour passer à un meilleur matériel moins d’une heure après une défaillance.

5
Oli

Il y a des choses que vous pouvez faire à plusieurs niveaux:

Niveau du réseau

  1. Matériel réseau: installez un équilibreur de charge avec des serveurs supplémentaires. Cela vous permettra de gérer assez facilement votre configuration existante, mais sa configuration coûtera probablement beaucoup d'argent dans les délais impartis (en fonction du niveau de support de vos fournisseurs d'hébergement).

  2. Matériel virtuel: passez à un système en nuage avec équilibrage de la charge intégré. Cela vous donnera les avantages de l'option 1, sans les coûts d'installation potentiellement lourds avec vos hôtes (vous ne payez que pour ce que vous utilisez), mais cela peut prendre du temps à vos côtés pour mettre en place.

Ce sont probablement les "meilleures" options pour y faire face. Ils sont très éprouvés et fiables, mais ils ont un coût financier - en particulier pour le point 1.

Cependant, ils peuvent tous deux être configurés pour gérer votre scénario "pire des cas" de "Nos serveurs ne peuvent pas faire face" - les répartiteurs de charge peuvent être configurés pour acheminer tout le trafic vers un serveur qui ne contient qu'une page à plat indiquant que le site est actuellement hors service, mais voici un peu d'information.

Niveau logiciel

Outre les méthodes présentées dans les autres réponses, la plupart des serveurs vous permettent de configurer des pages d'erreur de différentes manières. Il s'agit généralement d'une page sur le site. Toutefois, vous devriez également pouvoir émettre une redirection vers une page. un serveur différent aussi.

Dans IIS, par exemple, vous pouvez créer une réponse d'erreur "Réponse avec une redirection 302" - il peut s'agir d'une URL sur un serveur complètement différent - vous pouvez le faire au niveau de la page d'erreur .net ou au IIS niveau d'erreur:

.net

<customErrors mode="RemoteOnly">
  <remove statusCode="503" />
  <error redirect="htp://www.example.com/sitedown.html" statusCode="503" />
</customErrors>

IIS

Setting a redirect error in IIS

3
Zhaph - Ben Duguid

Si vous utilisez Apache: Recherchez dans le dossier racine le fichier nommé "htaccess.txt" ou ".htaccess". Ajoutez la ligne suivante:

ErrorDocument 503 http://www.example.com/customhtml.html

Vos visiteurs sont redirigés vers customhtml.html. Vous pouvez ajouter un iframe de votre "autre adresse Web" dans le code HTML.

0
Mithra

Je vais suggérer d’utiliser des serveurs multiples pour résoudre ce problème, où les serveurs sont connectés en format clustré. Donc, au cas où la charge du serveur atteindrait un niveau élevé, votre trafic serait redirigé vers un second serveur, etc.

0
Himanshu Singla