Se dico web server cosa ti viene in mente? Sono quasi certo che il primo nome che balena la tua mente è Apache, forse il più conosciuto e utilizzato web server del settore. In seconda battuta, la tua mente potrebbe portare alla luce l’acronimo IIS, davvero molto noto se non altro perché sostenuto da Microsoft che risulta il secondo web server per utilizzo dopo Apache, come confermano le ultime statistiche Netcraft.
Se oltre a questi due nomi ti è venuto in mente anche Nginx, allora sei davvero un geek e sei pronto ad affrontare l’argomento di cui voglio parlarti oggi.
Nginx è un web server che sta riscuotendo molto successo, tanto che una ricerca pubblicata qualche giorno fa da W3Techs contrasta con i dati Netcraft e pone Nginx come il più popolare web server fra i 1000 siti a miglior rank classificati da Alexa.
È inutile dire che questi dati così contrastanti dipendono dai campioni statistici usati e dai metodi di rilevazione considerati e non nascondo che sarebbe poco produttivo cercare di capire chi ha ragione e perdersi dietro ai numeri.
Quello che mi preme spiegarti è perché devi prendere in considerazione anche Nginx come web server da usare nei tuoi progetti web, quali vantaggi può darti e in quali occasioni non puoi esimerti dall’utilizzarlo.
Nginx è veloce, molto veloce!
Prima di tutto, partiamo dalle caratteristiche che hanno permesso a Nginx di conquistare un così largo consenso. Il segreto di questo web server russo è la velocità. Nginx è veloce, estremamente leggero e anche semplice da configurare.
Penso che queste tre condizioni siano più che sufficienti per garantire lunga vita a qualsiasi componente software! La velocità di Nginx è dovuta al modello di lavoro asincrono su cui si basa, che differisce dal modello a thread con cui lavora Apache. In pratica, Nginx è capace di operare in modo asincrono, servendo le richieste sugli oggetti in modo contemporaneo, come eventi individuali e indipendenti. Apache, invece, risponde a ogni richiesta utilizzando tutte le risorse disponibili e impegnandole fino a quando l’esecuzione della richiesta non è completata.
Questa differenza sostanziale fra i due web server fa sì che, almeno nella fornitura di pagine web statiche, Nginx sia molto più veloce e performante, riesca a gestire meglio le connessioni concorrenti e gli alti carichi di traffico, occupando meno risorse hardware.
Queste caratteristiche sono vantaggi di non poco conto, soprattutto in tutte quelle soluzioni web che richiedono un’alta scalabilità, un basso impatto sulle risorse e una grande velocità di risposta.
Proprio per queste peculiarità, Nginx viene usato almeno in tre scenari d’uso comuni, in cui il web server spicca per le sue capacità.
Nginx come Cache o Reverse Proxy di Apache
Il primo scenario prevede l’uso di Nginx come cache per Apache. In pratica Nginx è capace di raccogliere le richieste provenienti dal web e servire direttamente quelle che ricercano contenuti statici. In caso di elaborazioni PHP o altre forme di richiesta per contenuti dinamici, Nginx passa la palla ad Apache, implementato come web server di seconda battuta e subito pronto a intervenire ogni volta ne sia necessario.
In questo modo, puoi utilizzare la velocità di Nginx e la completezza di Apache, senza dover caricare quest’ultimo anche quando non è strettamente necessario. Inoltre, questa configurazione permette una piena scalabilità verticale dei server, ideale soprattutto se vuoi utilizzare CMS come WordPress, Drupal o Joomla.
Nginx come Cache o Reverse Proxy di un Application Server
Application server e framework come Ruby on Rails o lo stesso IIS gestiscono le query complesse molto bene, ma non sono capaci di funzionare da web server in modo sicuro ed efficiente per le richieste HTTP come Nginx. Come prima, quindi, Nginx può essere usato per gestire le richieste provenienti da internet, fornendo direttamente i contenuti statici e smistando agli application server le richieste destinate all’applicazione web.
Nginx come sostituto di Apache
Il titolo è sicuramente fuorviante: Nginx non può sostituire completamente Apache, a meno che non si faccia intervenire un altro componente chiamato PHP-FPM, necessario per gestire l’elaborazione degli script PHP. Insieme a PHP-FPM, Nginx può sostituire Apache gestendone le principali funzioni, fra cui i redirect, i processi di autenticazione e alcune funzionalità avanzate come lo streaming video e l’integrazione con i server di posta.