Osservazioni di vBulletin o tentativi di memorizzare nella cache contenuti dinamici. Osservazioni di vBulletin o tentativi di memorizzare nella cache contenuti dinamici Vita di vbulletin

Probabilmente hai visto molte volte forum sul motore vBulletin. I forum veri e propri non sono più di moda, ma vBulletin è ancora uno dei motori più popolari. Nella sua ultima (quinta) versione sono state rilevate diverse vulnerabilità che possono rovinare notevolmente la vita di un amministratore. In questo articolo ti racconterò come vengono utilizzati.

Il primo problema è il filtraggio errato dei dati utente. È stato segnalato da un ricercatore di sicurezza indipendente che ha voluto rimanere anonimo. La vulnerabilità, sebbene presenti alcune limitazioni, ha ricevuto uno stato critico perché consente di leggere qualsiasi file ed eseguire codice arbitrario sul sistema di destinazione.

La seconda vulnerabilità è stata rilevata dai ricercatori di TRUEL IT e ha ricevuto l'identificatore CVE-2017-17672. È correlato alle funzionalità di deserializzazione dei dati nel motore e può essere utilizzato da un utente malintenzionato per eliminare file arbitrari dal sistema.

Rapporti completi che dettagliano entrambi i problemi sono stati pubblicati come parte del programma Beyond Security di SecuriTeam. Esistono anche exploit PoC per dimostrare le vulnerabilità. Esaminiamo tutto questo in ordine.

Preparativi

Ho utilizzato la distribuzione WAMP come server.

Leggere file, eseguire comandi

Quindi, il motivo della prima vulnerabilità è una logica errata durante l'elaborazione del parametro routestring, che consente a un utente malintenzionato di includere qualsiasi file sul disco tramite include ed eseguire il codice PHP che si trova in esso.

Il nostro percorso inizia con il file più importante: index.php, dove avviene l'inizializzazione di base dell'applicazione.

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

Diamo un'occhiata al metodo vB5_Frontend_Application::init.

/include/vb5/frontend/application.php
13: la classe vB5_Frontend_Application estende vB5_ApplicationAbstract 14: ( 15: funzione statica pubblica init($configFile) 16: ( 17: parent::init($configFile); 18: 19: self::$instance = new vB5_Frontend_Application(); 20: self::$istanza->router = new vB5_Frontend_Routing( 21: self::$istanza->router->setRoutes();

Qui siamo interessati al metodo setRoutes.

47: funzione pubblica setRoutes() 48: ( 49: $this->processQueryString(); ... 54: if (isset($_GET["routestring"])) 55: ( 56: $percorso = $_GET[" stringa di percorso"];

La variabile $path contiene il valore userdata dal parametro routestring. Puoi passarci il percorso della pagina del forum e verrà caricata.



Diciamo che abbiamo superato /test .

Dopo aver assegnato una variabile, c'è una parte di codice che elimina la barra all'inizio della riga, se presente.

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

Come puoi vedere, il controllo è piuttosto strano. Come minimo, la presenza di un elenco di estensioni vietate scritto direttamente nel codice crea confusione. E in generale, il fatto stesso che l'estensione sia ottenuta tagliando quattro caratteri dalla fine della riga (riga 85) è sconcertante. In generale, se proviamo a ricevere un file con estensione gif, png, jsp, css o js, ​​il server restituirà una pagina 404 e lo script interromperà l'esecuzione. Una volta superati tutti i controlli, il metodo getRoute della classe vB_Api_Route viene chiamato utilizzando callApi. Cerca percorsi adatti in base alle informazioni fornite dall'utente.

La continuazione è disponibile solo per i membri

Opzione 1. Unisciti alla community del "sito" per leggere tutti i materiali sul sito

L'iscrizione alla community entro il periodo specificato ti darà accesso a TUTTI i materiali Hacker, aumenterà il tuo sconto cumulativo personale e ti consentirà di accumulare una valutazione Xakep Score professionale!

Seleziona il motore del forum. IPB, vBulletin, Phpbb


Un motore del forum è una cosa necessaria per un sito serio. Il principio è noto: qualsiasi sito web deve essere interattivo. Esistono molti modi per ottenere l'interattività, dai commenti agli articoli al proprio social network tematico. Il forum è forse lo strumento più universale per ottenere un feedback reale da parte dei visitatori.

Il forum ti consente di:

Crea un pubblico permanente di utenti del sito che torneranno costantemente e saranno attivi. L'attività dei visitatori è denaro reale.

Risparmiare sui contenuti. Se crei un forum, il contenuto verrà creato dagli utenti e il proprietario non avrà bisogno di acquistare grandi quantità di testi per la promozione.

Ampliare il nucleo semantico del sito. La creazione di un forum consente, senza troppi sforzi da parte del proprietario, di ampliare il numero di richieste per le quali il sito viene promosso.

L'installazione del motore del forum è un processo semplice, ma la configurazione e l'ulteriore amministrazione possono causare molte difficoltà a un principiante. Tuttavia, per ogni motore popolare esiste un'enorme quantità di documentazione, quindi se lo desideri puoi capire tutto. Oppure assumi un amministratore professionista.

Nel complesso, la stragrande maggioranza dei motori è abbastanza adatta per il normale funzionamento del forum, hanno approssimativamente lo stesso insieme di funzioni di base, incluso un sistema flessibile per l'impostazione dei diritti di accesso per gli utenti. Differiscono per facilità di amministrazione, set di modelli e plugin, affidabilità e supporto tecnico da parte del produttore. Inizierò la recensione con i primi tre su Runet: Phpbb è forse il motore più popolare per creare un forum su Runet. Per un principiante, il vantaggio principale di Phpbb è che sia il motore del forum stesso che tutti i tipi di componenti aggiuntivi sono gratuiti. Esistono anche molte diverse comunità di fan di Phpbb, sia su Internet di lingua russa che su Internet straniera.

Altri vantaggi includono velocità operativa, semplicità e relativa flessibilità delle impostazioni, un gran numero di modelli e componenti aggiuntivi. Se crei un forum in phpbb, allora può essere utilizzato come parte del sito (c'è la possibilità di integrazione con molti cms), ma puoi anche creare un portale più o meno completo basato su di esso.

Ma Phpbb ha anche uno svantaggio: è altamente vulnerabile sia agli attacchi di spam che agli attacchi di hacking con l'introduzione del proprio codice. Per evitare ciò, è necessario installare componenti aggiuntivi speciali per proteggersi dallo spam e aggiornare regolarmente il motore installando nuove versioni. Purtroppo, questo non fornisce sempre una protezione al 100%, quindi dovrai monitorarlo manualmente tu stesso o nominando dei moderatori. Puoi scaricarlo dal sito ufficiale https://www.phpbb.com/

IPB (Invision Power Board) è un motore di forum a pagamento, che spaventa immediatamente la maggior parte dei principianti. Tuttavia, se il progetto deve essere serio, difficilmente un importo di circa $ 200 per un IPB fermerà un webmaster determinato. Ma pensa dieci volte se sei pronto, anche per il bene di una gamma molto ampia di possibilità, a rifare costantemente il motore IPB per te stesso, con il rischio di complicarti il ​​supporto e gli aggiornamenti.

Il sistema ha un numero enorme di possibilità di integrazione con diversi servizi: vari cm, blog, chat, gallerie fotografiche, ecc. Forse il portale su questo motore può essere considerato un sito Web a tutti gli effetti, ovviamente, con determinate impostazioni.

E qui c'è un neo significativo: il motore IPB viene aggiornato abbastanza raramente, gli utenti stessi fungono da tester, che trovano essi stessi vulnerabilità ed errori. In ogni caso, il codice finisce per essere “storto” e non ottimale. Non esistono comunità di tifosi russi di alta qualità, tutti i problemi dovranno essere risolti in modo indipendente. Anche le localizzazioni russe sono tutt'altro che perfette; spesso i file di lingua devono essere modificati per la normale visualizzazione.

A causa della complessità e dell'inesattezza del codice, i forum su IPB vengono visualizzati correttamente solo in FireFox; in altri browser potrebbero verificarsi piccoli problemi;

Potrebbero esserci problemi anche durante l'aggiornamento dalla seconda alla terza versione: la struttura delle skin e delle classi è cambiata e se il forum è stato modificato, l'aggiornamento sarà problematico.

Il sistema dei modelli IPB è estremamente confuso, cambiare l'aspetto non è così semplice, dovrai "spostare" molti file. Il design standard non è male ed è abbastanza familiare, ma è standard e questo, di per sé, può rappresentare uno svantaggio significativo per molti. Puoi scaricare Invision Power Board dal sito ufficiale http://www.invisionpower.com/apps/board/
vBulletin (vb). Nel segmento Internet di lingua russa, vBulletin è tradizionalmente chiamato "vobla" o "bun". Questo è forse il miglior motore del forum, non c'è altro da aggiungere. Il prezzo di circa $ 250 (la licenza viene acquistata per un anno e durante questo periodo include aggiornamenti gratuiti) è abbastanza giustificato e si ripagherà sicuramente risparmiando tempo e nervi. Tutto qui funziona come un orologio. È abbastanza chiaro il motivo per cui vengono presi i soldi: il motore vBulletin viene costantemente migliorato ed è chiaro che ci stanno lavorando programmatori professionisti, e non solo fan.

Non ha senso elencare tutte le funzioni: esso (o i componenti aggiuntivi) implementa quasi tutto ciò di cui un amministratore potrebbe aver bisogno per creare un forum. C'è multi-citazione, supporto per podcast, comunità di utenti, gruppi sociali, un sistema di reputazione flessibile e molto altro.

Naturalmente, vBulletin ha un gran numero di componenti aggiuntivi e comunità di utenti, quindi non ci saranno problemi con la manutenzione, soprattutto perché esiste un team di supporto ufficiale. Lo svantaggio di vBulletin, anche se non molto grande, sono le aggiunte a pagamento, ad esempio, per i blog degli utenti.

Nel complesso, il forum non ha difetti. Può essere consigliato per progetti grandi e seri proprio per la sua affidabilità e resistenza a tutti i tipi di attacchi. Di conseguenza, crea un carico significativo sul server, soprattutto con i componenti aggiuntivi installati, ma per progetti seri di solito vengono utilizzati server seri e amministratori seri. Puoi scaricarlo dal sito ufficiale http://www.vbulletin.com/

SMF (Forum Macchine Semplici). Un motore semplice che qualsiasi principiante può gestire. La semplicità è compensata dalla mancanza di funzionalità, ma non tutti necessitano di un set completo di funzionalità. L'installazione dei plugin (mod) è comodamente organizzata nel motore e possono essere scaricati e installati direttamente dal pannello di amministrazione in pochi clic;

Il pannello di amministrazione è un po' insolito, ma per un principiante questo non è uno svantaggio, perché non ha esperienza o abitudine con altri motori. La non familiarità non significa disagio. Un altro vantaggio è la presenza di un gran numero di convertitori per il passaggio da altri motori.

Il forum è molto affidabile in termini di hacking e spam... beh, lo spam è un problema eterno che necessita e può essere combattuto. Nonostante SMF sia gratuito, sviluppatori e utenti esperti forniscono assistenza a tutti coloro che ne hanno bisogno sul forum ufficiale del progetto.

Sulla base di questo motore, puoi anche creare siti Web completi utilizzando componenti aggiuntivi speciali per portali (Adk Portal, EzPortal, ecc.). Tuttavia, la grande domanda è se valga la pena creare un portale basato su un forum. È più logico creare un forum in aggiunta al sito principale su un motore a tutti gli effetti.

Consiglio dell'Intelletto (IntBoard). Un motore di forum per i fan, scritto da un fan e abbandonato con successo da lui. Tuttavia, l'abbandono non è un motivo per sconsigliarlo categoricamente.

Parliamo subito delle carenze. I problemi spesso sorgono all'improvviso, non esiste un supporto di prim'ordine, il forum ufficiale è praticamente morto e i proprietari dei forum su questo motore raramente rispondono lì. Non ci sono praticamente componenti aggiuntivi o modelli: devi fare tutto da solo.

Ma ci sono anche dei vantaggi. Il codice del motore è abbastanza semplice da consentire anche a un principiante di capirlo e risolvere da solo alcuni problemi, oltre a regolare autonomamente alcune funzioni. Il motore è molto leggero e crea poco carico sul server. Il pannello di amministrazione è estremamente non standard, ma offre forse la migliore opportunità per configurare i diritti per gli utenti; un sistema di gruppi e diritti di accesso a ciascuna sezione specifica ti consentirà di creare un sistema di moderazione potente ed efficace.

PunBB. Un motore semplice e leggero con una comunità abbastanza potente che aiuterà a risolvere i problemi che si presentano. Poco impegnativo per le risorse del server. Il pannello amministrativo è intuitivo.

Il layout è realizzato utilizzando CSS, quindi i principianti che sono abituati al layout delle tabelle troveranno insolito modificare i modelli. Tuttavia, questo è anche un vantaggio: è tempo di padroneggiare le tecnologie moderne.

Uno svantaggio serio è l'elevata disponibilità dello spam: è necessario monitorarlo manualmente, oltre ai plugin installati.

ExBB è un motore gratuito, la cui particolarità è che funziona con database di testo senza utilizzare MySQL. Forse 10 anni fa questo era un vantaggio: tali siti creavano meno carico e l'hosting con supporto database era molto più costoso. Al giorno d'oggi qualsiasi hosting supporta MySQL e i database di testo rappresentano uno svantaggio; sono molto più lenti e meno affidabili.

Tuttavia, puoi creare un forum utilizzando questo cms per un sito di piccole dimensioni dove non è previsto un grande afflusso di visitatori e messaggi. È facile da installare, facile da mantenere e ha un gran numero di utenti e un forum di supporto sul sito ufficiale.

Vanilla – questo motore poco conosciuto si posiziona come aggiunta a Wordpress, uno dei cms più popolari. Tra le funzionalità standard di WordPress non c'è la possibilità di creare un forum. Naturalmente puoi adattare qualsiasi motore di forum, ma non è così facile. Vanilla viene installato come un normale plugin.

Il sistema dei messaggi personali è implementato in modo insolito: vengono pubblicati come argomenti normali, ma sono visibili solo a coloro a cui sono indirizzati. In qualsiasi topic, oltre a quello pubblico, puoi lasciare un messaggio privato. Insolito, ma abbastanza conveniente. In generale, sembra che gli sviluppatori abbiano deciso di creare un forum diverso da tutti gli altri. Sta a te decidere se questo sia un vantaggio o un svantaggio.

In generale, ci sono molti motori: puoi provare, puoi accontentarti immediatamente di qualcosa di popolare, puoi persino scrivere o ordinare qualcosa di tuo. È impossibile dire in modo inequivocabile quale opzione sarà ottimale per ciascun caso specifico.

L'amministrazione di tali servizi di solito non è responsabile di nulla, quindi se il tuo forum scompare in un momento meraviglioso, nella migliore delle ipotesi si scuseranno.

Nel prossimo articolo vi racconterò quali sono

Solo a scopo informativo. L'amministrazione non è responsabile del suo contenuto. Scarica gratis .


vBulletin Connect v5.3.3 è un pacchetto forum potente, scalabile e completamente personalizzabile per il tuo sito web.

Versione: 5.3.3 (Annullato da vBSupport.org)

Requisiti minimi php 5.6
Compatibile con PHP 7.1
Per una nuova installazione, è necessario rinominare il file htaccess.txt in .htaccess
Durante l'aggiornamento, eliminare la cartella dei caratteri (prima di avviare l'aggiornamento).

Nuove opportunità:
Nuova interfaccia utente con ampia integrazione social;
Ottimizzato per dispositivi mobili;
Installazione, gestione e configurazione semplificate;
Nuova architettura del database per una migliore ricerca e migliori prestazioni;
Comodo cambio dinamico dei contenuti;
Avanzato per la condivisione di video e immagini;
Piena integrazione con VigLink;
Più di 100 altre nuove funzionalità e miglioramenti;

Applicazioni integrate:
Forum di discussione
Gruppi
Sondaggi
Blog

Ottimizzazione del motore di ricerca:
URL ottimizzati per la SEO
META tag parola chiave/descrizione personalizzata

Flessibilità:
Profili utente estensibili
Riscrittura dell'URL
Localizzazione dell'interfaccia
Metadati

Conformità agli standard:
Distribuzione dei contenuti (RSS)
Distribuzione dei contenuti: RSS, Atom, XML
Compatibile con PHP v5.4

Sistema integrato senza interruzioni:
L'unico login coinvolto
Sistema di risoluzione unica
L'unico pannello di controllo amministrativo
Crea uno stile/tema continuo attraverso articoli, blog, forum

Dashboard per ciascun ruolo:
Controlli amministrativi
Pannello di controllo del moderatore
Pannello di controllo personalizzato
Sistema di risoluzione unificato
Motore di modelli Power per personalizzazione avanzata

Controllo utente:
Sistema multiutente con ruoli e poteri illimitati
Gruppi coinvolti
Sicurezza
Poteri granulari
Notifica del problema
SSL compatibile
Captcha
Conferma dell'indirizzo e-mail
Pannello di controllo dell'editor delle notizie dell'amministratore
Accedi al sistema "sciopero".
Le modifiche all'e-mail e alla password richiedono la password corrente
Conforme al Children's Online Privacy Protection Act (COPPA) del 1998

1. Vai al pannello di controllo amministratore:
Lingue e frasi: scarica/carica lingue.
2. Nel campo "Carica il file XML dal tuo computer", inserisci il percorso di
il file vbulletin-lingual_ru.xml sul tuo computer.
3. Nell'opzione "Sovrascrivi lingua", seleziona "Crea nuova lingua"
4. Nel campo "Titolo per la lingua caricata", inserisci il nome della lingua.
Se non sono stati inseriti dati, la lingua verrà chiamata "Russo (RU)"
5. Imposta "Sì" su "Ignora versione linguistica"
6. Imposta "Sì" su "Leggi set di caratteri da file XML"
7. Fare clic sul pulsante "Importa" e attendere il completamento del processo di download.
7A Se lo si desidera, è possibile rendere la nuova lingua la lingua "Predefinita",
facendo clic sul pulsante "Default"/"Valore predefinito" accanto ad esso.





Principali vantaggi:

  • Framework di database veloce ed efficiente
  • Interfaccia composta da modelli
  • Potente motore di ricerca
  • Supporto multilingue
  • Profili utente
  • Pannello di amministrazione potente e conveniente
  • Numero illimitato di sezioni/argomenti/messaggi
  • Notifiche tramite e-mail
  • Il sostegno del COPPA

Dato che il produttore non fornisce una demo del forum che possa essere installata, ho dovuto installare la versione di sinistra, scaricata da alcuni Vareznik. Pertanto le istruzioni potrebbero non corrispondere completamente al processo di installazione del forum sulle licenze. Dopo l'installazione, il sito è stato cancellato e non è stato utilizzato per lo scopo previsto.

Per installare vBulletin, vai al pannello di controllo dell'hosting (il pulsante con un ingranaggio accanto all'ordine di hosting nella fatturazione), lì nel "File Manager", in esso andiamo alla directory "www". Fare clic sul pulsante "Carica file nella directory corrente":

Specifica il percorso del file sul tuo computer:

Seleziona l'archivio con vBulletin e decomprimilo:

Eliminiamo i file e le directory che non ci servono, inclusa la directory del nostro dominio www, a condizione che tu non abbia nulla di cui hai bisogno lì. Se non lo metti nella radice del sito, o c'è qualcosa di necessario nella directory del sito, non è necessario eliminare la directory del dominio www:

Seleziona la directory con il programma di installazione di vBulletin e rinominala:

Inserisci il nome del nostro sito come nome della directory:

Vai alla sezione "Database" del pannello di controllo dell'hosting:

Crea un nuovo database MySQL e un utente con diritti di accesso completi ad esso:

Tieni presente che sia l'utente che il database ricevono automaticamente un prefisso basato sul nome del tuo account sul server di hosting:

Andiamo alla pagina principale del nostro sito Web e riceviamo il seguente errore vBulletin:

Inseriamo il percorso del programma di installazione nella barra degli indirizzi, aggiungiamo "install/install.php", dopodiché si avvia il programma di installazione del forum vBulletin:

Il programma di installazione di vBulletin verifica la presenza dei seguenti file:

Il passaggio successivo è verificare la connessione al database, non funziona, perché... Il file di configurazione del forum contiene dati errati:

Torniamo al pannello di controllo dell'hosting, file manager, andiamo alla directory con il forum, quindi alla sottodirectory “include”. Apri il file "config.php":

Inseriamo i dati corretti dal database nel file di configurazione, dopodiché lo chiudiamo:

Torniamo al sito, all'installatore. premi “F5”, questa volta va tutto bene, la connessione al database è cresciuta insieme:

Il programma di installazione di vBulletin crea tabelle nel database:

Il programma di installazione di vBulletin modifica i tipi di alcune tabelle:

I dati vengono inseriti nel database:

Lingue importate:

Gli stili vengono importati:

La guida viene importata:

Non tocchiamo le impostazioni predefinite; il programma di installazione di vBulletin ha determinato tutto correttamente:

Le impostazioni predefinite vengono importate:

Inserisci i dettagli dell'amministratore di vBulletin:

L'amministratore vBulletin è stato aggiunto con successo:

L'installazione di vBulletin sull'hosting è stata completata con successo:

Seguendo l'ultimo consiglio dell'installatore, elimina i file non necessari:

Puoi andare al forum vBulletin per assicurarti che tutto funzioni correttamente:

Ho diversi VPS sotto il mio controllo, sui quali gira... in generale, non è la mia zona di responsabilità, e quindi quello che gira lì gira, rallenta moderatamente, funziona moderatamente. E si è scoperto che su uno di essi era in esecuzione un certo forum e il forum ha iniziato a rallentare. E volevo capirlo...

Fonte
  • Forum per vBulletin 3.8.x
  • Spostato nel sottodominio forum.domain.com
  • Nginx 1.1.13, php 5.3.x (fpm)
  • A parte il forum, non c'è niente in esecuzione su questo server. ( è importante).
  • Mysql su un server separato, comunicazione tramite TCP/IP.
Sfondo
Ho vissuto un forum, non mi sono preoccupato, ho mostrato xm superiore il carico è intorno al 30-40%. E poi è arrivata l'ora "X" e il carico è balzato su un plateau piatto del 90% con picchi più alti, che, in generale, non è ronzante. Il sospetto di DDOS non è stato confermato. I registri hanno mostrato un carico di lavoro normale. Ebbene, prima di aumentare stupidamente le risorse, è nata l'idea di capire cosa stava succedendo e provare a nascondere tutto ciò che era possibile.
Indagine. Prima parte: cosa vuole una visitatrice?
Poiché non avevo familiarità con l'ideologia e le caratteristiche di questo software, ho iniziato a studiare il problema analizzando i log e il traffico tra i visitatori e il server. Innanzitutto mi ha sorpreso scoprire che gli allegati ai messaggi nel forum sono dati esclusivamente dallo script allegato.php, mentre i file stessi possono essere archiviati nel database, oppure su un disco locale, ma la restituzione avviene solo tramite uno script. E nient'altro. Cioè, otteniamo 8-10 contrazioni extra dell'interprete PHP per thread di messaggi con 8-10 foto. E questo è per ogni visitatore. Poiché per visualizzare gli allegati non è richiesta la registrazione su questo forum, gli allegati possono essere memorizzati nella cache, ad esempio, per un paio di giorni. Qualcosa come questo:
location = /attachment.php ( scade al massimo; 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 scade il 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 errore di aggiornamento invalid_header http_500; fastcgi_cache_valid 2d ) e da qualche parte nelle sezioni http; forum_att__cache: fastcgi_cache_path /var/ livelli cache/nginx/att=1:2 keys_zone=forum_att__cache:4m max_size=2g inattivo=2d;

La seconda “rivelazione” per me è stata che sul forum ci sono gli archivi, e non solo esistono, ma quasi la metà delle richieste provengono da loro. L'aspetto delle pagine consente inoltre di memorizzare nella cache il loro contenuto:
location /archive/ ( scade 10 giorni; limit_req zone=lim_req_1s_zone burst=2; location ~ \.css$ ( scade max; ) fastcgi_pass forum__php_cluster; fastcgi_index indice.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; fastcgi_hide_header Cache-Control scade il set-cookie "$request; _method:$http_if_modified_since:$http_if_none_match:$host: $request_uri:"; aggiornamento del timeout dell'errore invalid_header http_500; fastcgi_cache_valid 2d ) e alla sezione http: fastcgi_cache_path /var/cache/nginx/arclevel=1:2 keys_zone=forum_arc__cache:4m max_size=2g inactive=2d; Allo stesso tempo proteggiamoci dagli attacchi DDOS: limit_req_zone "$psUID" zone=lim_req_1s_zone:2m rate=1r/s;
Ti parlerò più tardi della formazione della chiave “$psUID”.

Indagine. Seconda parte: autorizzazione in vBulletin
Dal punto di vista di un visitatore del forum, un visitatore può essere un utente registrato o un ospite. Ma una situazione completamente diversa si sviluppa se osserviamo la situazione “è venuto, ha camminato, ha effettuato l’accesso, ha camminato, è uscito, ha camminato” dal punto di vista della comparsa e della scomparsa dei cookie nel browser. Quindi, cancella i cookie per il dominio e i suoi sottodomini, apri HTTPfox e guarda cosa succede:
HTTP/1.1 200 OK Set-Cookie: PHPSESSID=cdme9rrptft67tbo97p4t1cua5; scade=mercoledì 22 febbraio 2012 15:04:12 GMT; percorso=/; domain=.domain.com Set-Cookie: bblastvisit=1329059052; scade=lunedì 11 febbraio 2013 15:04:12 GMT; percorso=/; dominio=.dominio.com Set-Cookie: bblastactivity=0; scade=lunedì 11 febbraio 2013 15:04:12 GMT; percorso=/; dominio=.dominio.com Set-Cookie: uid=XCuiGU831OyC8VLqAx/QAg==; scade=Gio 31-Dic-37 23:55:55 GMT; dominio=.dominio.com; percorso=/
CON fluido E PHPSESSID tutto è chiaro: queste sono le macchinazioni di nginx e dell'interprete php con l'opzione installata sessione.auto_start, ma il resto sono monitor dell'attività sul forum. Ma il cookie di sessione principale di vBulletin non è stato ancora osservato. Guardando al futuro, dirò che vBulletin non utilizza una sessione PHP standard (più precisamente, QUASI non la usa), ma mantiene la propria, il cui identificatore è memorizzato in un cookie bbsessionhash. Pertanto, l'utente ha effettuato l'accesso, ma non è presente alcuna sessione, ovvero è anonimo senza sessione. In questo caso i link al forum possono poi essere di due tipologie (questo vuol dire tutti i link presenti nella pagina, e non uno così e un altro così):
forum.domain.com/forumdisplay.php?s=12b66e447be52ebc84ab16d3f39626fb&f=69
forum.domain.com/forumdisplay.php?f=69
E se segui il collegamento del primo tipo, la risposta successiva dal forum sarà il cookie di sessione, ma se segui il collegamento del secondo tipo, no. Se non hai ricevuto un cookie dalla sessione con la seconda risposta, puoi girovagare per il forum senza alcuna sessione e senza sosta finché non ti imbatti in un collegamento del primo tipo (non sono riuscito a capire lo schema del loro aspetto), oppure vuoi accedere. Se il login va a buon fine, il cookie di sessione arriverà in ogni caso. Se prima dell'accesso l'ospite era anonimo con una sessione, la sessione verrà sostituita per lui. Sembra questo:
HTTP/1.1 200 OK Set-Cookie: bbsessionhash=85745bc6110db5221e159087bf037f24; percorso=/; dominio=.dominio.com; HttpOnly
Dopo il login, la sessione è “stabile” e non vi è alcun salto di qualità con i collegamenti. La procedura di logout non è diversa: tutti i cookie del forum esistenti vengono cancellati (anche quelli che non sono stati impostati) e viene scritto il cookie di una nuova sessione (“anonima”):
HTTP/1.1 200 OK Set-Cookie: bbsessionhash=eliminato; scade=Gio 01-Gen-1970 00:00:01 GMT; percorso=/; domain=.domain.com Set-Cookie: bblastvisit=eliminato; scade=Gio 01-Gen-1970 00:00:01 GMT; percorso=/; dominio=.dominio.com Set-Cookie: bblastactivity=eliminato; scade=Gio 01-Gen-1970 00:00:01 GMT; percorso=/; domain=.domain.com Set-Cookie: bbthread_lastview=eliminato; scade=Gio 01-Gen-1970 00:00:01 GMT; percorso=/; dominio=.dominio.com Set-Cookie: bbreferrerid=eliminato; scade=Gio 01-Gen-1970 00:00:01 GMT; percorso=/; dominio=.dominio.com Set-Cookie: bbusid=eliminato; scade=Gio 01-Gen-1970 00:00:01 GMT; percorso=/; dominio=.dominio.com Set-Cookie: bbpassword=eliminato; scade=Gio 01-Gen-1970 00:00:01 GMT; percorso=/; dominio=.dominio.com Set-Cookie: bbthreadedmode=eliminato; scade=Gio 01-Gen-1970 00:00:01 GMT; percorso=/; dominio=.dominio.com Set-Cookie: bbstyleid=eliminato; scade=Gio 01-Gen-1970 00:00:01 GMT; percorso=/; dominio=.dominio.com Set-Cookie: bblingualid=eliminato; scade=Gio 01-Gen-1970 00:00:01 GMT; percorso=/; domain=.domain.com Set-Cookie: bbsessionhash=3d0bdc5dbe8dabae361deebe8f6048d2; percorso=/; dominio=.dominio.com; HttpOnly
Cioè, in uscita otteniamo una persona anonima (ospite), ma al cento per cento con una sessione.
Di conseguenza, dal punto di vista del software del forum E Intestazioni HTTP abbiamo tre tipi di utenti: ospite senza sessione, ospite con sessione, visitatore registrato. Inoltre, a livello nginx, distinguere il secondo dal terzo è estremamente problematico.

Ora, avendo capito quali cookie e come viaggiano tra il visitatore e il server, puoi affrontare il tema del caching dei contenuti dinamici. Come sai, la funzionalità per memorizzare nella cache le risposte dal backend fastcgi in nginx è integrata nel modulo ngx_http_fastcgi_module. Per fare ciò, è necessario registrare una zona di memorizzazione nella cache a livello globale nella sezione http e una chiave nella posizione desiderata. E se per contenuti condizionatamente statici (immagini, archivi) la chiave per la memorizzazione nella cache potrebbe essere considerata un URI con aggiunte minori, quindi. per le dinamiche di memorizzazione nella cache è necessario tenere conto anche dell'utente. Sembrerebbe una regola simile
fastcgi_cache_key "$request_method:$http_if_modified_since:$http_if_none_match:$host:$request_uri:$cookie_bbsessionhash:";
poteva soddisfare sia gli ospiti che gli utenti registrati, ma in pratica i visitatori hanno iniziato a ricevere il contenuto della cache di qualcun altro. La memorizzazione nella cache delle dinamiche "vere" doveva essere disabilitata. Spero che il verdetto non sia definitivo.

Tuttavia, queste informazioni non sono inutili. Sulla base di esso possiamo generare una chiave per limitare la frequenza delle richieste in base non solo all’indirizzo IP del visitatore, ma anche al suo stato.
imposta $psUID "anon"; imposta $psUCL "anon"; if ($cookie_bbsessionhash) ( imposta $psUID "$cookie_bbsessionhash"; imposta $psUCL "utente"; ) if ($psUCL = "anon") ( imposta $psUID "anon:$remote_addr"; )
Inseriamo questo frammento della configurazione nella sezione server della configurazione nginx prima di descrivere tutte le posizioni. Di conseguenza, riceviamo una chiave originale per un utente che ha una sessione e una chiave basata sull'indirizzo IP per i visitatori che non hanno una sessione (ad esempio, per i crawler di ricerca).

risultati
Come risultato di questi sforzi, il carico complessivo sulla macchina virtuale è diminuito da un plateau del 90% a un carico del 40%, con picchi fino all'80%.