Observations de vBulletin ou tentatives de mise en cache de contenu dynamique. Observations de vBulletin ou tentatives de mise en cache de contenu dynamique Vie de vbulletin

Vous avez probablement vu plusieurs fois des forums sur le moteur vBulletin. Les forums en tant que tels ne sont plus à la mode, mais vBulletin reste l'un des moteurs les plus populaires. Dans sa dernière (cinquième) version, plusieurs vulnérabilités ont été découvertes qui peuvent grandement gâcher la vie d'un administrateur. Dans cet article, je vais vous expliquer comment ils sont utilisés.

Le premier problème est un filtrage incorrect des données utilisateur. Cela a été rapporté par un chercheur indépendant en sécurité qui a souhaité rester anonyme. La vulnérabilité, bien qu'elle présente certaines limitations, a reçu un statut critique car elle vous permet de lire n'importe quel fichier et d'exécuter du code arbitraire sur le système cible.

La deuxième vulnérabilité a été découverte par des chercheurs de TRUEL IT et a reçu l'identifiant CVE-2017-17672. Il est lié aux fonctionnalités de désérialisation des données dans le moteur et peut être utilisé par un attaquant pour supprimer des fichiers arbitraires sur le système.

Des rapports complets détaillant ces deux problèmes ont été publiés dans le cadre du programme Beyond Security de SecuriTeam. Il existe également des exploits PoC pour démontrer les vulnérabilités. Passons en revue tout cela dans l'ordre.

Les préparatifs

J'ai utilisé la distribution WAMP comme serveur.

Lire des fichiers, exécuter des commandes

Ainsi, la raison de la première vulnérabilité est une logique incorrecte lors du traitement du paramètre routestring, qui permet à un attaquant d'inclure n'importe quel fichier sur le disque via l'inclusion et d'exécuter le code PHP qui s'y trouve.

Notre chemin commence par le fichier le plus important - index.php, où a lieu l'initialisation de base de l'application.

/index.php
48 : $app = vB5_Frontend_Application::init("config.php"); ... 60 : $routage = $app->getRouter(); 61 : $method = $routing->getAction(); 62 : $template = $routing->getTemplate(); 63 : $class = $routing->getControllerClass();

Regardons la méthode vB5_Frontend_Application::init.

/includes/vb5/frontend/application.php
13 : la classe vB5_Frontend_Application étend vB5_ApplicationAbstract 14 : ( 15 : fonction statique publique init($configFile) 16 : ( 17 : parent::init($configFile); 18 : 19 : self::$instance = new vB5_Frontend_Application(); 20 : self::$instance->router = new vB5_Frontend_Routing(); 21 : self::$instance->router->setRoutes();

Nous nous intéressons ici à la méthode setRoutes.

47 : fonction publique setRoutes() 48 : ( 49 : $this->processQueryString(); ... 54 : if (isset($_GET["routestring"])) 55 : ( 56 : $path = $_GET[" chaîne de route"] ;

La variable $path contient la valeur userdata du paramètre routestring. Vous pouvez y transmettre le chemin d'accès à la page du forum et il sera chargé.



Disons que nous avons réussi /test .

Après avoir attribué une variable, il y a un morceau de code qui supprime la barre oblique au début de la ligne, si elle est présente.

/includes/vb5/frontend/routing.php
75 : if (strlen($path) AND $path(0) == "/") 76 : ( 77 : $path = substr($path, 1); // $path = "test" 78 : )
inclut\vb5\frontend\routing.php
83 : if (strlen($path) > 2) 84 : ( 85 : $ext = strtolower(substr($path, -4)) ; 86 : if (($ext == ".gif") OR ($ext == ".png") OR ($ext == ".jpg") OR ($ext == ".css") 87 : OR (strtolower(substr($path, -3)) == ".js" )) 88: ( 89: en-tête("HTTP/1.0 404 Not Found"); 90: die(""); 91: ) 92: )

Comme vous pouvez le constater, le chèque est assez étrange. À tout le moins, la présence d’une liste d’extensions interdites écrite directement dans le code prête à confusion. Et d'une manière générale, le fait même que l'extension soit obtenue en coupant quatre caractères à la fin de la ligne (ligne 85) laisse perplexe. En général, si nous essayons de recevoir un fichier avec les extensions gif, png, jsp, css ou js, le serveur renverra une page 404 et le script cessera de s'exécuter. Lorsque toutes les vérifications sont réussies, la méthode getRoute de la classe vB_Api_Route est appelée à l'aide de callApi. Il recherche les itinéraires appropriés sur la base des informations fournies par l'utilisateur.

La suite est disponible uniquement pour les membres

Option 1. Rejoignez la communauté « site » pour lire tous les documents sur le site

L'adhésion à la communauté dans la période spécifiée vous donnera accès à TOUS les documents Hacker, augmentera votre remise cumulée personnelle et vous permettra d'accumuler une note professionnelle Xakep Score !

Sélectionnez le moteur du forum. IPB, vBulletin, Phpbb


Un moteur de forum est une chose nécessaire pour un site sérieux. Le principe est bien connu : tout site internet doit être interactif. Il existe de nombreuses façons d'atteindre l'interactivité, des commentaires aux articles en passant par votre propre réseau social thématique. Le forum est peut-être l'outil le plus universel pour obtenir de véritables commentaires des visiteurs.

Le forum vous permet de :

Créez une audience permanente d’utilisateurs du site qui reviendront constamment et seront actifs. L’activité des visiteurs représente de l’argent réel.

Économiser sur le contenu. Si vous créez un forum, le contenu sera créé par les utilisateurs et le propriétaire n'aura pas besoin d'acheter de grandes quantités de textes à des fins de promotion.

Élargir le noyau sémantique du site. La création d'un forum permet, sans trop d'effort de la part du propriétaire, d'augmenter le nombre de demandes pour lesquelles le site est promu.

L'installation du moteur de forum est un processus simple, mais la configuration et l'administration ultérieure peuvent poser de nombreuses difficultés pour un débutant. Cependant, il existe une énorme quantité de documentation pour chaque moteur populaire, donc si vous le souhaitez, vous pouvez tout comprendre. Ou embauchez un administrateur professionnel.

Dans l'ensemble, la grande majorité des moteurs sont tout à fait adaptés au fonctionnement normal du forum, ils ont à peu près le même ensemble de fonctions de base, y compris un système flexible de définition des droits d'accès des utilisateurs. Ils se distinguent par la facilité d'administration, un ensemble de modèles et de plugins, la fiabilité et le support technique du fabricant. Je vais commencer l'examen par les trois premiers de Runet : Phpbb est peut-être le moteur le plus populaire pour créer un forum sur Runet. Pour un débutant, le principal avantage de Phpbb est que le moteur de forum lui-même et toutes sortes de modules complémentaires sont gratuits. Il existe également de nombreuses communautés de fans Phpbb différentes, tant sur l'Internet russophone qu'étranger.

D'autres avantages incluent la rapidité de fonctionnement, la simplicité et la relative flexibilité des paramètres, un grand nombre de modèles et de modules complémentaires. Si vous créez un forum en phpbb, alors il peut être utilisé dans le cadre du site (il existe une possibilité d'intégration avec de nombreux cms), mais vous pouvez également créer un site portail plus ou moins à part entière basé sur celui-ci.

Mais il y a aussi un inconvénient de Phpbb : il est très vulnérable aux attaques de spam et au piratage avec l'introduction de son propre code. Pour éviter cela, vous devez installer des modules complémentaires spéciaux pour vous protéger contre le spam, ainsi que mettre régulièrement à jour le moteur en installant de nouvelles versions. Hélas, cela n'offre pas toujours une protection à 100 %, vous devrez donc surveiller cela manuellement vous-même ou en désignant des modérateurs. Vous pouvez le télécharger sur le site officiel https://www.phpbb.com/

IPB (Invision Power Board) est un moteur de forum payant, qui fait immédiatement fuir la plupart des débutants. Cependant, si le projet se veut sérieux, il est peu probable qu'un montant d'environ 200 $ pour un IPB arrête un webmaster déterminé. Mais réfléchissez dix fois si vous êtes prêt, même au nom d'un très large éventail de possibilités, à refaire constamment le moteur IPB pour vous-même, au risque de vous compliquer le support et les mises à jour.

Le système offre un grand nombre de possibilités d'intégration avec différents services - divers cms, blogs, chats, galeries de photos, etc. Peut-être qu'un portail sur ce moteur peut être considéré comme un site Web à part entière, bien sûr, avec certains paramètres.

Et ici, il y a un problème important: le moteur IPB est mis à jour assez rarement, les utilisateurs eux-mêmes agissent en tant que testeurs, qui trouvent eux-mêmes des vulnérabilités et des erreurs. Dans tous les cas, le code finit par être « tordu » et sous-optimal. Il n’existe pas de communautés de fans russes de grande qualité ; tous les problèmes devront être résolus de manière indépendante. Les localisations russes sont également loin d'être parfaites ; les fichiers de langue doivent souvent être modifiés pour un affichage normal.

En raison de la complexité et de l'inexactitude du code, les forums sur IPB ne s'affichent correctement que dans FireFox ; dans d'autres navigateurs, des problèmes mineurs peuvent survenir ;

Il peut également y avoir un problème lors de la mise à niveau de la deuxième à la troisième version : la structure des skins et des classes a changé, et si le forum a été modifié, la mise à niveau sera problématique.

Le système de modèles IPB est extrêmement déroutant, changer l'apparence n'est pas si facile, vous devrez « parcourir » de nombreux fichiers. La conception standard n'est pas mauvaise et assez familière - mais elle est standard, ce qui, en soi, peut constituer un inconvénient important pour beaucoup. Vous pouvez télécharger Invision Power Board sur le site officiel http://www.invisionpower.com/apps/board/
vBulletin (vb). Dans le segment russophone de l'Internet, vBulletin est traditionnellement appelé « vobla » ou « chignon ». C'est peut-être le meilleur moteur de forum, il n'y a rien d'autre à ajouter. Le prix d'environ 250 $ (la licence est achetée pour un an et comprend des mises à jour gratuites pendant cette période) est tout à fait justifié et sera certainement rentabilisé en économisant du temps et des nerfs. Ici, tout fonctionne comme sur des roulettes. Il est tout à fait clair pourquoi l'argent est pris - le moteur vBulletin est constamment amélioré, et il est clair que des programmeurs professionnels y travaillent, et pas seulement des fans.

Il ne sert à rien de lister toutes les fonctions - celui-ci (ou les modules complémentaires) implémente presque tout ce dont un administrateur pourrait avoir besoin pour créer un forum. Il existe des citations multiples, une prise en charge du podcasting, des communautés d'utilisateurs, des groupes sociaux, un système de réputation flexible et bien plus encore.

Bien entendu, vBulletin dispose d'un grand nombre de modules complémentaires et de communautés d'utilisateurs, il n'y aura donc aucun problème de maintenance, d'autant plus qu'il existe une équipe d'assistance officielle. L'inconvénient de vBulletin, bien que pas très important, réside dans les ajouts payants, par exemple pour les blogs d'utilisateurs.

Dans l'ensemble, le forum ne présente aucun défaut. Il peut être recommandé pour les grands projets sérieux précisément en raison de sa fiabilité et de sa résistance à toutes sortes d’attaques. En conséquence, cela crée une charge importante sur le serveur, en particulier avec les modules complémentaires installés, mais pour les projets sérieux, ils utilisent généralement des serveurs sérieux et des administrateurs sérieux. Vous pouvez le télécharger sur le site officiel http://www.vbulletin.com/

SMF (Forum des machines simples). Un moteur simple que tout débutant peut gérer. La simplicité est compensée par le manque de fonctionnalités, mais tout le monde n'a pas besoin d'un ensemble complet de « trucs ». L'installation des plugins (mods) est commodément organisée dans le moteur ; ils peuvent être téléchargés et installés directement depuis le panneau d'administration en quelques clics.

Le panneau administratif est quelque peu inhabituel, mais pour un débutant ce n'est pas un inconvénient, car il n'a aucune expérience ni habitude avec d'autres moteurs. La méconnaissance ne signifie pas l'inconvénient. Un autre avantage est la présence d'un grand nombre de convertisseurs pour passer d'autres moteurs.

Le forum est très fiable en termes de piratage et de spam... eh bien, le spam est un problème éternel qui doit et peut être combattu. Bien que SMF soit gratuit, les développeurs et les utilisateurs expérimentés fournissent une assistance à tous ceux qui en ont besoin sur le forum officiel du projet.

Sur la base de ce moteur, vous pouvez également créer des sites Web à part entière à l'aide de modules complémentaires spéciaux pour les portails (Adk Portal, EzPortal, etc.). Cependant, la grande question est de savoir s'il vaut la peine de créer un portail basé sur un forum. Il est plus logique de créer un forum en complément du site principal sur un moteur à part entière.

Conseil intellectuel (IntBoard). Un moteur de forum pour les fans, écrit par un fan et abandonné avec succès par lui. Cependant, l’abandon n’est pas une raison pour ne pas le recommander catégoriquement.

Parlons tout de suite des lacunes. Les problèmes surviennent souvent à l'improviste, il n'y a pas de grand support, le forum officiel est pratiquement mort et les propriétaires de forums sur ce moteur y répondent rarement. Il n'y a pratiquement aucun module complémentaire ni modèle - vous devez tout faire vous-même.

Mais il y a aussi des avantages. Le code moteur est suffisamment simple pour que même un débutant puisse le comprendre et résoudre lui-même certains problèmes, ainsi qu'ajuster certaines fonctions par lui-même. Le moteur est très léger et crée peu de charge sur le serveur. Le panneau d'administration est extrêmement non standard, mais il offre peut-être la meilleure opportunité de configurer les droits des utilisateurs ; un système de groupes et de droits d'accès à chaque section spécifique vous permettra de créer un système de modération puissant et efficace.

Jeu de motsBB. Un moteur simple et léger avec une communauté assez puissante qui aidera à résoudre les problèmes qui surviennent. Peu exigeant sur les ressources du serveur. Le panneau d'administration est intuitif.

La mise en page est réalisée à l'aide de CSS, donc les débutants habitués à la mise en page des tableaux trouveront inhabituel de modifier des modèles. Cependant, c’est aussi un plus : il est temps de maîtriser les technologies modernes.

Un inconvénient majeur est la haute disponibilité du spam - vous devez le surveiller manuellement, en plus des plugins installés.

ExBB est un moteur gratuit dont la particularité est qu'il fonctionne avec des bases de données texte sans utiliser MySQL. Il y a peut-être 10 ans, c'était un avantage : de tels sites créaient moins de charge et l'hébergement avec prise en charge de base de données était beaucoup plus cher. De nos jours, tout hébergement prend en charge MySQL et les bases de données texte constituent un inconvénient ; ils sont beaucoup plus lents et moins fiables.

Cependant, vous pouvez créer un forum à l'aide de ce cms pour un petit site où un afflux important de visiteurs et de messages n'est pas attendu. Il est facile à installer, à entretenir et dispose d'un grand nombre d'utilisateurs et d'un forum d'assistance sur le site officiel.

Vanilla – ce moteur peu connu se positionne comme un complément à Wordpress, l’un des cms les plus populaires. Parmi les fonctionnalités standards de WordPress, il n’y a pas de possibilité de créer un forum. Bien sûr, vous pouvez adapter n’importe quel moteur de forum, mais ce n’est pas si simple. Vanilla est installé comme un plugin classique.

Le système de messages personnels est mis en œuvre de manière inhabituelle : ils sont publiés comme des sujets réguliers, mais ne sont visibles que par ceux à qui ils s'adressent. Dans n'importe quel sujet, en plus du sujet public, vous pouvez laisser un message privé. Inhabituel, mais assez pratique. De manière générale, il semble que les développeurs aient décidé de faire un forum pas comme les autres. C'est à vous de décider si c'est un plus ou un moins.

En général, il existe de nombreux moteurs - vous pouvez essayer, vous pouvez immédiatement choisir quelque chose de populaire, vous pouvez même écrire ou commander quelque chose de votre choix. Il est impossible de dire sans ambiguïté quelle option sera optimale pour chaque cas spécifique.

L'administration de ces services n'est généralement responsable de rien, donc si votre forum disparaît à un moment merveilleux, au mieux, ils s'excuseront.

Dans le prochain article, je vous dirai ce qu'il y a

À titre informatif uniquement. L'administration n'est pas responsable de son contenu. Télécharger gratuitement .


vBulletin Connect v5.3.3 est un package de forum puissant, évolutif et entièrement personnalisable pour votre site Web.

Version: 5.3.3 (annulé par vBSupport.org)

Exigences minimales php 5.6
Compatible avec PHP 7.1
Pour une nouvelle installation, vous devez renommer le fichier htaccess.txt en .htaccess
Lors de la mise à jour, supprimez le dossier des polices (avant de lancer la mise à jour).

Nouvelles opportunités:
Nouvelle interface utilisateur avec une intégration sociale étendue ;
Optimisé pour les appareils mobiles ;
Installation, gestion et configuration simplifiées ;
Nouvelle architecture de base de données pour une recherche améliorée et de meilleures performances ;
Changement de contenu dynamique pratique ;
Avancé pour le partage de vidéos et d’images ;
Intégration complète avec VigLink ;
Plus de 100 autres nouvelles fonctionnalités et améliorations ;

Applications intégrées :
Forum de discussion
Groupes
Les sondages
Blog

Optimisation du moteur de recherche:
URL optimisées pour le référencement
Balise META de mot-clé/description personnalisée

La flexibilité:
Profils utilisateur extensibles
Réécriture d'URL
Localisation des interfaces
Métadonnées

Conformité aux normes :
Syndication de contenu (RSS)
Syndication de contenu : RSS, Atom, XML
Compatible PHP v5.4

Système intégré incassable :
La seule connexion impliquée
Système à résolution unique
Le seul panneau de contrôle d'administration
Créez un style/thème continu à travers des articles, des blogs, un forum

Tableaux de bord pour chaque rôle :
Contrôles administratifs
Panneau de configuration du modérateur
Panneau de configuration personnalisé
Système de résolution unifié
Moteur de modèles puissant pour une personnalisation avancée

Contrôle utilisateur :
Système multi-utilisateurs avec rôles et pouvoirs illimités
Groupes impliqués
Sécurité
Pouvoirs granulaires
Notification de problème
SSL compatible
Captcha
Confirmation de l'adresse e-mail
Panneau de configuration de l'éditeur d'actualités de l'administrateur
Système de connexion "grève"
Les modifications d'e-mail et de mot de passe nécessitent le mot de passe actuel
Conforme à la loi sur la protection de la vie privée en ligne des enfants (COPPA) 1998

1. Accédez au panneau de configuration de l'administrateur :
Langues et phrases - Télécharger / Télécharger des langues.
2. Dans le champ « SOIT télécharger le fichier XML depuis votre ordinateur », saisissez le chemin d'accès à
le fichier vbulletin-lingual_ru.xml sur votre ordinateur.
3. Dans l'option "Ecraser la langue", sélectionnez "Créer une nouvelle langue".
4. Dans le champ « Titre de la langue téléchargée », saisissez le nom de la langue.
S'il n'y a aucune donnée saisie, la langue s'appellera "Russe (RU)"
5. Définissez « Oui » sur « Ignorer la version linguistique »
6. Définissez "Oui" sur "Lire le jeu de caractères à partir d'un fichier XML".
7. Cliquez sur le bouton "Importer" et attendez la fin du processus de téléchargement.
7A Si vous le souhaitez, vous pouvez faire de la nouvelle langue la langue « par défaut »,
en cliquant sur le bouton « Par défaut » / « Valeur par défaut » à côté.





Principaux avantages:

  • Cadre de base de données rapide et efficace
  • Interface composée de modèles
  • Moteur de recherche puissant
  • Prise en charge multilingue
  • Des profils d'utilisateurs
  • Panneau d'administration puissant et pratique
  • Nombre illimité de sections/sujets/messages
  • Notifications par email
  • Soutien COPPA

En raison du fait que le fabricant ne propose pas de démo du forum pouvant être installée, j'ai dû installer la version de gauche, téléchargée depuis certains Vareznik. Les instructions peuvent donc ne pas correspondre complètement au processus d'installation du forum de licence. Après l'installation, le site a été supprimé et n'a pas été utilisé aux fins prévues.

Pour installer vBulletin, allez dans le panneau de contrôle d'hébergement (le bouton avec un engrenage à côté de la commande d'hébergement dans la facturation), là dans le "Gestionnaire de fichiers", nous y allons dans le répertoire "www". Cliquez sur le bouton « Télécharger le fichier dans le répertoire actuel » :

Spécifiez le chemin d'accès au fichier sur votre ordinateur :

Sélectionnez l'archive avec vBulletin et décompressez-la :

Nous supprimons les fichiers et répertoires dont nous n'avons pas besoin, y compris le répertoire de notre domaine www - à condition que vous n'y ayez rien dont vous avez besoin. Si vous ne le mettez pas à la racine du site, ou s'il y a quelque chose de nécessaire dans le répertoire du site, vous n'avez pas besoin de supprimer le répertoire du domaine www :

Sélectionnez le répertoire contenant le programme d'installation de vBulletin et renommez-le :

Entrez le nom de notre site comme nom de répertoire :

Rendez-vous dans la rubrique « Bases de données » du panneau de configuration de l'hébergement :

Créez une nouvelle base de données MySQL et un utilisateur avec des droits d'accès complets :

Veuillez noter que l'utilisateur et la base de données reçoivent automatiquement un préfixe basé sur le nom de votre compte sur le serveur d'hébergement :

Nous allons sur la page principale de notre site et recevons l'erreur vBulletin suivante :

Nous entrons le chemin d'accès à l'installateur dans la barre d'adresse, ajoutons « install/install.php », après quoi le programme d'installation du forum vBulletin démarre :

Le programme d'installation de vBulletin vérifie la présence des fichiers suivants :

L'étape suivante consiste à vérifier la connexion à la base de données, cela ne fonctionne pas - parce que... Le fichier de configuration du forum contient des données incorrectes :

On retourne au panneau de contrôle d'hébergement, au gestionnaire de fichiers, on va dans le répertoire avec le forum, puis dans le sous-répertoire « include ». Ouvrez le fichier "config.php" :

Nous entrons les données correctes de la base de données dans le fichier de configuration, après quoi nous le fermons :

Nous revenons sur le site, chez l'installateur. appuyez sur « F5 », cette fois tout va bien, la connexion à la base de données s'est développée :

Le programme d'installation de vBulletin crée des tables dans la base de données :

Le programme d'installation de vBulletin modifie les types de certaines tables :

Les données sont saisies dans la base de données :

Langues importées :

Les styles sont importés :

L'aide est importée :

Nous ne touchons pas aux paramètres par défaut ; le programme d'installation de vBulletin a tout déterminé correctement :

Les paramètres par défaut sont importés :

Entrez les détails de l'administrateur vBulletin :

L'administrateur vBulletin a été ajouté avec succès :

L'installation de vBulletin sur l'hébergement a été réalisée avec succès :

En suivant les derniers conseils de l'installateur, supprimez les fichiers inutiles :

Vous pouvez vous rendre sur le forum vBulletin pour vous assurer que tout fonctionne correctement :

Je suis en charge de plusieurs VPS sur lesquels ils tournent... généralement pas mon domaine de responsabilité, et donc ce qui y tourne tourne, ralentit moyennement, fonctionne modérément. Et il s'est avéré qu'un certain forum fonctionnait sur l'un d'eux, et le forum a commencé à ralentir. Et je voulais comprendre...

Source
  • Forum pour vBulletin 3.8.x
  • Déplacé vers le sous-domaine forum.domain.com
  • Nginx 1.1.13, php 5.3.x (fpm)
  • A part le forum, rien ne tourne sur ce serveur. ( C'est important).
  • Mysql sur un serveur séparé, communication via TCP/IP.
Arrière-plan
J'ai vécu un forum, je n'ai pas pris la peine, j'ai montré xm haut la charge est d'environ 30 à 40 pour cent. Et puis l'heure « X » est arrivée et la charge a sauté jusqu'à un plateau plat de 90 pour cent avec des pics plus élevés, ce qui, en général, ne bourdonne pas. Les soupçons de DDOS n'ont pas été confirmés. Les journaux ont montré une charge de travail normale. Eh bien, avant d'augmenter bêtement les ressources, l'idée est née de comprendre ce qui se passait et d'essayer de mettre en cache tout ce qui était possible.
Enquête. Première partie : que veut une visiteuse ?
Comme je n'étais pas familier avec l'idéologie et les fonctionnalités de ce logiciel, j'ai commencé à étudier le problème en analysant les logs et le trafic entre les visiteurs et le serveur. Tout d'abord, j'ai été surpris de découvrir que les pièces jointes aux messages du forum sont données exclusivement par le script pièce jointe.php, alors que les fichiers eux-mêmes peuvent être stockés dans la base de données ou sur un disque local, mais le retour se fait uniquement via un script. Et rien d'autre. Autrement dit, nous obtenons 8 à 10 contractions supplémentaires de l'interpréteur PHP par fil de message avec 8 à 10 photos. Et cela vaut pour chaque visiteur. Étant donné qu'il n'est pas nécessaire de s'inscrire sur ce forum pour afficher les pièces jointes, celles-ci peuvent être mises en cache pendant, disons, quelques jours. Quelque chose comme ça:
location = /attachment.php ( expire max; limit_req zone=lim_req_1s_zone burst=5; fastcgi_pass forum__php_cluster; include /etc/nginx/fastcgi_params; include /etc/nginx/fastcgi_params_php-fpm; fastcgi_cache forum_att__cache; fastcgi_ignore_headers Cache-Control expire Set-Cookie ; fastcgi_hide_header Set-Cookie; fastcgi_cache_key "$request_method:$http_if_modified_since:$http_if_none_match:$host:$request_uri:"; fastcgi_cache_use_stale timeout d'erreur invalid_header http_500; forum_att__cache : fastcgi_cache_path /var/ cache/nginx/att niveaux=1:2 keys_zone=forum_att__cache:4m max_size=2g inactif=2d ;

La deuxième « révélation » pour moi, c'est qu'il y a des archives sur le forum, et non seulement elles existent, mais près de la moitié des demandes proviennent d'elles. L’apparence des pages permet également de mettre en cache leur contenu :
emplacement /archive/ (expire 10j ; limit_req zone=lim_req_1s_zone burst=2 ; emplacement ~ \.css$ (expire max ; ) fastcgi_pass forum__php_cluster ; fastcgi_index index.php ; include /etc/nginx/fastcgi_params ; include /etc/nginx/fastcgi_params_php -fpm; fastcgi_param SCRIPT_FILENAME $document_root/index.php; fastcgi_param SCRIPT_NAME $fastcgi_cache_cache; délai d'expiration de l'erreur de mise à jour du conte invalid_header http_500 ; fastcgi_cache_valid 2d ; ) et à la section http : fastcgi_cache_path /var/cache/nginx/arclevels=1:2 keys_zone=forum_arc__cache:4m max_size=2g inactive=2d; En parallèle, protégeons-nous des attaques DDOS : limit_req_zone "$psUID" zone=lim_req_1s_zone:2m rate=1r/s;
Je vous parlerai plus tard de la formation de la clé « $psUID ».

Enquête. Deuxième partie - autorisation dans vBulletin
Du point de vue d'un visiteur du forum, un visiteur peut être soit un utilisateur enregistré, soit un invité. Mais une situation complètement différente se développe si l'on observe la situation « venu, marché, connecté, marché, déconnecté, marché » du point de vue de l'apparition et de la disparition des cookies dans le navigateur. Alors, effacez les cookies du domaine et de ses sous-domaines, ouvrez HTTPfox et voyez ce qui se passe :
HTTP/1.1 200 OK Définir le cookie : PHPSESSID=cdme9rrptft67tbo97p4t1cua5 ; expire = mercredi 22 février 2012 à 15:04:12 GMT ; chemin=/; domain=.domain.com Set-Cookie : bblastvisit=1329059052 ; expire = lundi 11 février 2013 15:04:12 GMT ; chemin=/; domain=.domain.com Set-Cookie : bblastactivity=0 ; expire = lundi 11 février 2013 15:04:12 GMT ; chemin=/; domain=.domain.com Set-Cookie : uid=XCuiGU831OyC8VLqAx/QAg== ; expire = jeu. 31 décembre 2037 à 23:55:55 GMT ; domaine=.domaine.com ; chemin=/
AVEC uide Et IDPHSESSID tout est clair - ce sont les machinations de nginx et de l'interpréteur php avec l'option installée session.auto_start, mais les autres sont des moniteurs d'activité sur le forum. Mais le cookie de session principal de vBulletin n’a pas encore été observé. Pour l'avenir, je dirai que vBulletin n'utilise pas de session PHP standard (plus précisément, PRESQUE ne l'utilise pas), mais maintient la sienne, dont l'identifiant est stocké dans un cookie. bbsessionhash. Ainsi, l'utilisateur s'est connecté, mais il n'y a pas de session, c'est-à-dire qu'il est anonyme sans session. Dans ce cas, les liens vers le forum peuvent alors être de deux types (c'est-à-dire tous les liens de la page, et non pas un comme ceci et un autre comme cela) :
forum.domain.com/forumdisplay.php?s=12b66e447be52ebc84ab16d3f39626fb&f=69
forum.domain.com/forumdisplay.php?f=69
Et si vous suivez le lien du premier type, alors la prochaine réponse du forum sera le cookie de session, mais si vous suivez le lien du deuxième type, ce ne sera pas le cas. Si vous n'avez pas reçu de cookie de la session avec la deuxième réponse, vous pouvez alors vous promener sur le forum sans session et agité jusqu'à ce que vous tombiez sur un lien du premier type (je n'ai pas pu comprendre le schéma de leur apparition), ou vous souhaitez vous connecter. Si la connexion réussit, le cookie de session arrivera de quelque manière que ce soit. Si avant de se connecter, l'invité était anonyme avec une session, alors la session lui sera remplacée. Cela ressemble à ceci :
HTTP/1.1 200 OK Définir le cookie : bbsessionhash=85745bc6110db5221e159087bf037f24 ; chemin=/; domaine=.domaine.com ; Http uniquement
Après la connexion, la session est « stable » et il n’y a pas de saute-mouton avec les liens. La procédure de déconnexion n'est pas différente - tous les cookies du forum existants sont supprimés (même ceux qui n'ont pas été définis) et le cookie d'une nouvelle session (« anonyme ») est écrit :
HTTP/1.1 200 OK Set-Cookie : bbsessionhash=deleted ; expire = jeu. 01 janvier 1970 00:00:01 GMT ; chemin=/; domain=.domain.com Set-Cookie : bblastvisit=deleted ; expire = jeu. 01 janvier 1970 00:00:01 GMT ; chemin=/; domain=.domain.com Set-Cookie : bblastactivity=deleted ; expire = jeu. 01 janvier 1970 00:00:01 GMT ; chemin=/; domain=.domain.com Set-Cookie : bbthread_lastview=deleted ; expire = jeu. 01 janvier 1970 00:00:01 GMT ; chemin=/; domain=.domain.com Set-Cookie : bbreferrerid=deleted ; expire = jeu. 01 janvier 1970 00:00:01 GMT ; chemin=/; domain=.domain.com Set-Cookie : bbuserid=deleted ; expire = jeu. 01 janvier 1970 00:00:01 GMT ; chemin=/; domain=.domain.com Set-Cookie : bbpassword=deleted ; expire = jeu. 01 janvier 1970 00:00:01 GMT ; chemin=/; domain=.domain.com Set-Cookie : bbthreadedmode=deleted ; expire = jeu. 01 janvier 1970 00:00:01 GMT ; chemin=/; domain=.domain.com Set-Cookie : bbstyleid=deleted ; expire = jeu. 01 janvier 1970 00:00:01 GMT ; chemin=/; domain=.domain.com Set-Cookie : bblingualid=deleted ; expire = jeu. 01 janvier 1970 00:00:01 GMT ; chemin=/; domain=.domain.com Set-Cookie : bbsessionhash=3d0bdc5dbe8dabae361deebe8f6048d2 ; chemin=/; domaine=.domaine.com ; Http uniquement
Autrement dit, à la sortie, nous obtenons une personne anonyme (invité), mais à cent pour cent avec une session.
En conséquence, du point de vue du logiciel de forum ET En-têtes HTTP, nous avons trois types d'utilisateurs : invité sans séance, invité avec séance, visiteur connecté. De plus, au niveau nginx, distinguer le deuxième du troisième est extrêmement problématique.

Maintenant que vous avez compris quels cookies et comment ils circulent entre le visiteur et le serveur, vous pouvez aborder la question de la mise en cache du contenu dynamique. Comme vous le savez, la fonctionnalité de mise en cache des réponses du backend fastcgi dans nginx est intégrée au module ngx_http_fastcgi_module. Pour ce faire, vous devez enregistrer globalement une zone de mise en cache dans la section http et une clé à l'emplacement souhaité. Et si pour un contenu conditionnellement statique (images, archives), la clé de mise en cache peut être considérée comme un URI avec des ajouts mineurs, alors. pour la dynamique de mise en cache, vous devez également prendre en compte l'utilisateur. Cela semble être une règle.
fastcgi_cache_key "$request_method:$http_if_modified_since:$http_if_none_match:$host:$request_uri:$cookie_bbsessionhash:";
pouvait satisfaire à la fois les invités et les utilisateurs connectés, mais dans la pratique, les visiteurs ont commencé à recevoir le contenu du cache de quelqu'un d'autre. La mise en cache des « vraies » dynamiques a dû être désactivée. J'espère que le verdict n'est pas définitif.

Cependant, ces informations ne sont pas inutiles. Sur cette base, nous pouvons générer une clé pour limiter la fréquence des demandes en fonction non seulement de l’adresse IP du visiteur, mais également de son statut.
définir $psUID "anon" ; définir $psUCL "anon" ; if ($cookie_bbsessionhash) ( set $psUID "$cookie_bbsessionhash"; set $psUCL "user"; ) if ($psUCL = "anon") ( set $psUID "anon:$remote_addr"; )
Nous plaçons ce fragment de la configuration dans la section serveur de la configuration nginx avant de décrire tous les emplacements. En conséquence, nous recevons une clé originale pour un utilisateur qui a une session et une clé basée sur l'adresse IP pour les visiteurs qui n'ont pas de session (par exemple, pour les robots de recherche).

résultats
Grâce à ces efforts, la charge globale sur la machine virtuelle est passée d'un plateau de 90 % à une charge de scie de 40 %, avec des pics allant jusqu'à 80 %.