Server web Nginx Daniele Iamartino <danieleiamartino@gmail.com>



Documenti analoghi
Installazione LAMP. Installare un server lamp su Linux Ubuntu. Per installare un server LAMP in Ubuntu come prima cosa apriamo il terminale:

Con accesso remoto s'intende la possibilità di accedere ad uno o più Personal Computer con un modem ed una linea telefonica.

Xampp. Valeriano Maysonnave - A.A. 2014/2015 -

Il Web Server e il protocollo HTTP

Mac Application Manager 1.3 (SOLO PER TIGER)

INSTALLAZIONE NUOVO CLIENT TUTTOTEL (04 Novembre 2014)

Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress

Guida Joomla. di: Alessandro Rossi, Flavio Copes

Product Shipping Cost Guida d'installazione ed Utilizzo

File, Modifica, Visualizza, Strumenti, Messaggio

ICARO Terminal Server per Aprile

Apache Webserver. Piccola introduzione all'installazione ed alla configurazione, a cura di: Alessandro Gervaso

Nelle reti di calcolatori, le porte (traduzione impropria del termine. port inglese, che in realtà significa porto) sono lo strumento

INSTALLAZIONE JOOMLA

Il web server Apache Lezione n. 3. Introduzione

2010 Ing. Punzenberger COPA-DATA Srl. Tutti i diritti riservati.

Proteggiamo il PC con il Firewall di Windows Vista

Argomenti Percorso 7 Apache HTTP

IL MIO PRIMO SITO: NEWS

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Strutturazione logica dei dati: i file

Dopo aver installato WSFTP.le, alla prima schermata quando lo apriamo vedremo questo.

Gate Manager. Come accedere alla rete di automazione da un PC (Rete cliente) COME ACCEDERE ALLA RETE DI AUTOMAZIONE DA UN PC (RETE CLIENTE)...

flusso delle informazioni... 2 password... 3 password/ inserimento di una nuova richiesta... 4 le condizioni di vendita... 6

VoipExperts.it SkyStone - Introduzione

Architetture Web a tre livelli: CGI, SSI, ISAPI e codice mobile Architetture a 3 livelli (1)

CONFIGURAZIONE XAMPP + SSL (HTTPS)

Innanzitutto, esistono diversi modi per realizzare una rete o più reti messe insieme; vi illustro la mia soluzione :

GUIDA UTENTE MONEY TRANSFER MANAGER

Bibliografia: Utenti e sessioni

Configurazione di Outlook Express

Configurazione avanzata di XAMPP

FISH Sardegna ONLUS. Manuale Utente.

Poi clichiamo su sistema

Web Server Benchmarking: Apache 2.4 vs Nginx 1.6.2

30 giorni di prova gratuiti, entra nel sito scarica e installa subito mypckey

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

GUIDA RAPIDA CONFIGURAZIONE RETE DDNS - INTERNET

Lezione n 1! Introduzione"

Rete Mac -Pc. Mac Os X Dove inserire i valori (IP, Subnetmask, ecc) Risorse di Rete (mousedx-proprietà)>

Configurazione WAN (accesso internet)

NGINX Web Server. Tommaso Sardelli. 8 Aprile Corsi GNU/Linux Avanzati 2015 Politecnico Open unix Lab. sardelli.tommaso[at]gmail.

Manuale per la configurazione di AziendaSoft in rete

ELENCO CLIENTI FORNITORI Patch1

Proxy. Krishna Tateneni Traduzione del documento: Luciano Montanaro Manutenzione della traduzione: Federico Zenith

Elementi sull uso dei firewall

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

INFN Security Workshop Firenze Settembre IMHO e IMP: una interfaccia Web sicura per la posta elettronica. Raffaele.Cicchese@pr.infn.

Dal sito: Articolo recensito da Paolo Latella

Gestione della memoria centrale

COSTER. Import/Export su SWC701. SwcImportExport

Configurazione FileZilla Server

GateManager. 1 Indice. tecnico@gate-manager.it

3. Introduzione all'internetworking

Procedura di installazione di Xubuntu 8.10 su un PC

NOTE OPERATIVE. Prodotto Inaz Download Manager. Release 1.3.0

Lezione 3. Joomla 2.5

FPf per Windows 3.1. Guida all uso

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche

COME UTILIZZARE ARCHIVE-HOST

XTOTEM offline sul proprio PC

NEXT-GEN USG: Filtri Web

ARCHIVIA PLUS VERSIONE SQL SERVER

IL MIO PRIMO SITO NEWS USANDO GLI SCHEDARI

Lezione II: Web server e ambiente di lavoro

Zeroshell: VPN Lan-to-Lan. Il sistema operativo multifunzionale. creato da

Creare un sito Multilingua con Joomla 1.6

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain.

Backup e Restore di un database PostgreSQL Sandro Fioravanti INFN-LNF

FtpZone Guida all uso Versione 2.1

GUIDA UTENTE BILLIARDS COUNTER (Vers )

LABORATORIO PER IL DESIGN DELLE INTERFACCE PEGORARO ALESSANDRO CASSERO.IT MANUALE DI AGGIORNAMENTO, MANUTENZIONE E USO DEL SITO

17 Gli scenari. cartelle di lavoro; unendoli poi in un

FINE ANNO BOLLE / FATTURE PER E/SATTO

HBase Data Model. in più : le colonne sono raccolte in gruppi di colonne detti Column Family; Cosa cambia dunque?

Invio SMS. DM Board ICS Invio SMS

INSTALLAZIONE NUOVO CLIENT SUITE IPSOA (04 Novembre 2014)

Laboratorio di Sistemi Programmare in Php con NetBeans Php. Programmare in Php con Xampp e NetBeans IDE

Come masterizzare dischi con Nero 11

Innanzitutto andiamo sul sito ed eseguiamo il download del programma cliccando su Download Dropbox.

Guida Migrazione Posta Operazioni da effettuare entro il 15 gennaio 2012

MailStore Proxy è disponibile gratuitamente per tutti i clienti di MailStore Server all indirizzo

DINAMIC: gestione assistenza tecnica

Registratori di Cassa

Apache - IDS e Firewall HTTP LBIT SOLUZIONI. Apache - IDS e Firewall HTTP 2013 INFORMATICHE

Joomla! 2.5:Utenti e permessi - Il wiki di Joomla.it

Qualcuno suggerisce di usare il laptop collegandolo a mouse, schermo e tastiera. Vero, ma allora perché non usare un desktop, spendendo meno?

Zeroshell: VPN Host-to-Lan. Il sistema operativo multifunzionale. creato da

Guida Rapida all uso del License Manager di ROCKEY4Smart (V )

Reti di Telecomunicazione Lezione 6

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

SPRING SQ COMUNICAZIONE OPERAZIONI IVA NON INFERIORI A 3000 EURO PER L ANNO 2011

Studi di Settore. Nota Operativa 22/4/2013

Documento guida per l installazione di CAIgest.

LEZIONE 3. Il pannello di amministrazione di Drupal, configurazione del sito

Guida al sistema. Dott. Enea Belloni

La VPN con il FRITZ!Box Parte I. La VPN con il FRITZ!Box Parte I

Titolare del trattamento dei dati innanzi descritto è tsnpalombara.it

Il Protocollo HTTP e la programmazione di estensioni Web

Transcript:

Server web Nginx Daniele Iamartino <danieleiamartino@gmail.com>

Cos'è nginx? Di cosa parleremo? È un server web pensato per avere le performance migliori Nasce nel 2002, progettato appositamente per servire le richieste dirette al sito www.rambler.ru (500 milioni di visite al giorno nel 2008), dove il più noto Apache falliva. Oggi è usato da Facebook, Google, Wordpress, Hulu, SourceForge e altri.. Utilizzato dal 9% dei siti con almeno 1 milione di visitatori Rilasciato sotto licenza BSD like Si pronuncia Engine X Scritto in C Vedremo come configurarlo per il nostro server web

Le features principali Programma in sé leggerissimo in memoria e CPU. Possiamo compilarlo escludendone molte parti per renderlo ancora più leggero. Idea principale: un processo per core della CPU è sufficiente a gestire migliaia di richieste. Generare un sacco di processi/thread è inutile (vedi Apache...). Utilizzo di socket asincroni per gestire le richieste HTTP. File di configurazione più lunghi ma più logici, semplici da capire e dettagliati. Possibilità infinite per configurazioni molto particolari (limitazioni di accesso a cartelle specifiche, controlli sui limiti delle richieste, limitazioni di banda, regexp ovunque,...)

Le features principali Scritto pensando anche alla sicurezza. Non supporta CGI ma solo FastCGI per vari motivi... (feature?) Tanti interessanti moduli già integrati e altri aggiuntivi abilitabili. Load balancing semplicissimo da implementare. Dal file di configurazione possiamo modificare tantissime impostazioni anche a basso livello (numero di file aperti per ogni processo, chiamata di sistema da usare per gestire i socket asincroni, affinità ai core della CPU, engine di cifratura hardware,...)

Feature dei moduli Tra quelli di default: Compressione gzip, cookie UserID, Access (range IP), Auth Basic, Rewrite, proxy (reverse), FastCGI, Limit requests, identificazione User Agents, load balancing, Tra quelli aggiuntivi abilitabili: SSL, IPv6, Image filter, RealIP, GeoIP, FLV support, Body addition,...

Dove trovarlo Sorgenti a www.nginx.org Già pacchettizzato in tutte le maggiori distribuzioni In atto di compilazione bisogna decidere quali moduli abilitare, assicuratevi che il vostro pacchetto abbia già compilati tutti i moduli che vi servono (nginx -V) In debian il pacchetto ha tutti i moduli abilitati..

Struttura principale È un demone, quindi lo controlliamo come al solito via /etc/init.d/nginx o /etc/rc.d/nginx. Possiamo anche lanciare il comando nginx passando alcuni parametri per gestirlo. nginx -s start nginx -s stop... Nginx suddiviso in due processi: Master process (lanciato da root, apre il socket in ascolto e legge i file di configurazione) Una serie di Workers processes (servono le richieste HTTP, avviati con un altro utente, ad esempio www-data)

Struttura principale

La configurazione L'intera configurazione si trova in un unico file, che però può richiamarne altri (ad esempio uno per sito da ospitare è una buona idea). A seconda della distribuzione il file di configurazione nginx.conf può trovarsi in percorsi diversi.. In Debian c'è /etc/nginx/nginx.conf già pronto che richiama altri file in /etc/nginx/sites-enabled (classico come per Apache) Quello che dobbiamo fare è: Modifichiamo la configurazione nginx -t (testiamo la correttezza sintattica) (Ri)avviamo il demone (/etc/init.d/nginx restart)

La configurazione All'interno del file di configurazione ci sono una serie di blocchi dove sono dichiarate delle direttive. Ogni direttiva ha uno o più blocchi dove può stare. La sintassi dei file di configurazione è in stile programmativo: # = Commento Ogni riga termina con ; Ogni blocco di impostazioni è compreso tra { Possiamo richiamare in qualunque punto delle variabili, precedute da $ (ex: $user_agent) Richiamiamo altri file di configurazione con include È possibile inserire delle condizioni if($variabile){...

user www-data www-data; worker_processes 2; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 128; http { include /etc/nginx/mime.types; log_not_found off; Impostazioni generali Impostazioni tecniche per gli workers gzip on; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; server { listen 80; server_name website.com www.website.com; access_log /var/log/nginx/antani.access.log; root /var/www; location / { index index.html; Dichiarazione di un sito Blocco HTTP

Struttura Rivediamo passo passo l'esempio: user www-data www-data : specifichiamo utente e gruppo che avranno i processi workers worker_processes : decidiamo quanti processi worker avviare (sono processi fissi, no respawn). È inutile metterne più di uno per core della CPU. error_log : decidiamo dove salvare il file per gli errori pid : Il blocco events : può essere presente solo una volta e serve a dichiarare le impostazioni di rete utilizzate dagli workers

Struttura All'interno di events abbiamo worker_connections : qui decidiamo quante connessioni può gestire ciascun worker. Il numero di connessioni da gestire dipende molto dall'hardware che abbiamo a disposizione. Qualche esempio pratico : CPU dual core, 2GB di ram, 2 workers, 128 connessioni per worker ~= 1 richiesta/sec. CPU quad core, 4GB di ram, 2 workers, 1024 connessioni per worker ~= 50 richieste/sec. È consigabile limitare anche il numero di files aperti per ogni worker (worker_rlimi_nofile). In generale è conveniente fare dei benchmark (utilizzando ad esempio httperf ) e modificare questi parametri.

Struttura Notiamo che i vari blocchi hanno anche una struttura gerarchica Il blocco HTTP ci permette di dichiarare un server web (quindi al suo interno metteremo impostazioni generali del server web) All'interno di un blocco HTTP possiamo dichiarare un blocco server, che corrisponde ad un singolo sito ospitato sul server. Ogni blocco server è indipendente. Stessa idea dei VirtualHost di Apache All'interno dei blocchi server possiamo dichiarare blocchi location dove possiamo specificare impostazioni/azioni da fare solo per quello specifico percorso

Direttive principali del blocco server listen scegliamo la porta e l'indirizzo su cui restare in ascolto (aggiungendo inoltre default scegliamo il server di default in caso di problemi e con ssl abilitiamo SSL sul server) listen 192.168.0.1:80; server_name : diciamo al blocco server alle richieste per quali siti rispondere. È possibile usare anche regexp! server_name www.website.com www2.website.com; server_name *.website.com; server_name ~^\.example\.com$ root : scegliamo la cartella del sito da cui prendere i files. access_log insieme ad error_log può essere posizionato in vari blocchi. Servono per registrare i log degli accessi alle pagine e i log di errore.

Funzionalità del blocco location All'interno di un blocco server possiamo filtrare vari percorsi o file e effettuare operazioni diverse. È possibile utilizzare regex per filtrare percorsi e files! location = /abc { [ ] location /abc { [ ] location ~ ^/abc$ { [ ] location *~ ^/abc$ { [ ] Effettua il match anche su /abcdefghil...

Esempi Bloccare l'accesso a tutti i files che iniziano con.ht (per retrocompatibilità con i.htaccess e.htpasswd usati con apache ad esempio... location ~ /\.ht { deny all; Potremmo però decidere di lasciare la visione solo all'amministratore che è ad 192.168.0.1... location ~ /admin/ { allow 192.168.0.1; deny all;

Esempi Potremmo voler proteggere una o più pagine da una password: location /admin/ { deny all; auth_basic Authentication required auth_basic_user_file config/htpasswd; Limitiamo la banda per ciascuna connessione a files in una certa cartella.. location /downloads/ { limit_rate 500k;

Altri esempi utili Il sito del linuxday? location / { rewrite ^ http://www.fsugitalia.org/.. permanent; Rewrite più complicata: location /documenti/ { rewrite ^/documenti/(.*)$ /doc/$1; Limitazione sugli accessi limit_zone zone_name $binary_remote_addr 10m; limit_conn zone_name connection_limit; limit_conn myzone 5;

Altre direttive error_page 404 /not_found.html; error_page 500 501 502 /server_error.html; Modulo addition: add_after_body /var/www/tail.html Modulo image filter: location ~* \.(png jpg gif)$ { image_filter resize 200 100; Modulo GeoIP (MaxMind): geoip_country country.dat; geoip_city city.dat; if($geoip_country_code=it){ [ ]

CGI CGI o Common Gateway Interface, è un meccanismo ideato per realizzare applicazioni lato server in qualunque lingauggio di programmazione (C, PHP, Python, Perl, ) per servire alcune richieste Il meccanismo di solito è: Il server riceve una richiesta per servire una certa pagina (relativa all'applicazione) Il server lancia un processo per eseguire il programma e gli passa come parametri da linea di comando le varie variabili passate dalla GET/POST Il programma risponde alla richiesta e il server web inoltra la risposta al client

CGI

FastCGI L'idea di FastCGI è evitare di lanciare un processo per ogni richiesta. Avviamo un piccolo server socket per scambiare le richieste tra server web e applicazione. Si occupa poi l'applicazione di generare eventualmente altri processi.. Quindi: Il server web riceve la richiesta e chiama l'applicazione su un socket passandogli i dati della richiesta L'applicazione elabora il risultato e lo restituisce sul socket.

FastCGI

CGI vs. FastCGI Ok, ma che vantaggio c'è? FastCGI si presta per essere molto più scalabile (l'applicazione/programma che deve gestire la richiesta può essere anche su un server separato). Non è roba da poco!

Perché stiamo parlando di ciò? Nginx, per motivi di performance e altro, non supporta CGI classici ma solo FastCGI. Per nostra fortuna però esistono implementazioni di PHP (e non solo) che supportano FastCGI. Una di queste è PHP-FPM. Tra l'altro possiamo fare caching sulle richieste FastCGI

PHP-FPM È il metodo consigliato per utilizzare PHP su nginx. (E sembra anche quello più efficiente) Si tratta di un servizio che apre un socket (TCP o Unix socket) che riceve le richieste da nginx per servire alcune pagine php generando un gruppo di processi.

PHP-FPM PHP-FPM: PHP FastCGI Process Manager In Debian non è tra i pacchetti dei repository principali. Possiamo comunque prenderlo dai repository di dotdeb.org In alternativa è sempre possibile compilare php5 applicando la patch per abilitare php-pfm Dobbiamo fare attenzione a configurarlo di modo da non generare troppi processi (file di configurazione /etc/php5/fpm/pool.d/www.conf )

Configurazione lato nginx server { server_name *.website.com; listen 80; root /var/www; index index.php; location ~* \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; include fastcgi_params;

Vogliamo scalare? (modulo upstream incluso) Niente di più facile: cambiamo la riga fastcgi_pass 127.0.0.1:9000; Con qualcosa tipo: fastcgi_pass php_backend; Poi dichiariamo un blocco: upstream php_backend { server 192.168.0.101:9000; server 192.168.0.102:9000; server 192.168.0.103:9000; Potremmo avere qualche problema con cookie di sessione passando da un server di backend all'altro, allora aggiungiamo l'opzione ip_hash Lo stesso metodo funziona per scalare nginx.

Configurazione PHP-FPM [www] Listen = 127.0.0.1:9000 listen.backlog = 10 listen.allowed_clients = 127.0.0.1 user = www-data group = www-data pm = static pm.max_children = 5 pm.max_requests = 10 chdir = / php_admin_value[memory_limit] = 35M

pastcgi_params fastcgi_param QUERY_STRING fastcgi_param REQUEST_METHOD fastcgi_param CONTENT_TYPE fastcgi_param CONTENT_LENGTH $query_string; $request_method; $content_type; $content_length; fastcgi_param SCRIPT_NAME fastcgi_param REQUEST_URI fastcgi_param DOCUMENT_URI fastcgi_param DOCUMENT_ROOT fastcgi_param SERVER_PROTOCOL $fastcgi_script_name; $request_uri; $document_uri; $document_root; $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR fastcgi_param REMOTE_PORT fastcgi_param SERVER_ADDR fastcgi_param SERVER_PORT fastcgi_param SERVER_NAME $remote_addr; $remote_port; $server_addr; $server_port; $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200;

...e per altra roba Non ho appronfondito ma in Django è sufficiente installare python-flup per abilitare il supporto a FastCGI e lanciare il servizio. Se vogliamo utilizzare comunque dei CGI possiamo farlo mettendo un altro server web che li supporta (ad esempio lighttpd) e usare nginx come reverse proxy.. (sembra assurdo ma ha buone performance) Lato nginx resta tutto come già visto per PHP-FPM

Altri spunti Varnish come reverse proxy per il caching

Riferimenti Libro Nginx HTTP Server di Clément Nedelcu http://wiki.nginx.org/ Google?