NGROK – reverse proxy server cross-platform

ngrok mostrare un sito in locale

Ngrok Pubblica il tuo sito in localhost

Lo sviluppo di siti e di Webb Application e’, al giorno d’oggi, uno dei core business piu’ importanti per la maggior parte delle aziende in tutto il mondo, motivo per cui sono nati una grande quantita’ di tool per agevolare i web developer durante tutte le operazioni di sviluppo, test e produzione.

Molto spesso capita che non si abbia il tempo o anche il budget per gestire piu’ ambienti di sviluppo, cosi ci si riduce per avere tutto il proprio ambiente [sviluppo / test / pre produzione] soltanto sul proprio pc.

Come fare quindi se c’e’ bisogno di mostrare l’avanzamento del lavoro al cliente senza dover prima creare e/o aggiornare gli altri ambienti di test/pre-produzione??? …. e’ per aiutare in questa pressante fase che e’ nato un tool come ngrok.

Ngrok e’ un reverse proxy server con cui e’ possibile rendere “pubblico” un server locale, anche se e’ collocato dietro un NAT od un Firewall, il tutto tramite secure tunnel. Quindi attraverso Ngrok si potra’ implementare un personal cloud service direttamente dalla propria postazione di lavoro realizzando cosi uno stack LAMP/LEMP

 

INSTALLAZIONE

mkdir ngrok
cd ngrok/
wget -c https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
unzip ngrok-stable-linux-amd64.zip

Dopo aver installato il pacchetto possiamo fare una prova, se ad esempio usate come web server Apache, potete farlo in questo modo;

sudo nano /var/www/html/index.html

<!DOCTYPE html> <html> <body> <h1>Prova</h1> <p>Test di Ngrock.</p> </body> </html>

Salviamo il file e ora possiamo avviare il tool puntandolo sulla porta su cui abbiamo in ascolto il nostro Web server:

ngrok http 80

Una volta lanciato il comando ci apparira’ qualcosa di simile:

Session Status online Session Expires 7 hours, 53 minutes
Version 2.2.8 Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://44c9afca.ngrok.io -> localhost:80
Forwarding https://44c9afca.ngrok.io -> localhost:80

Una volta avviato possiamo dunque iniziare ad usarlo anche tramite la comoda interfaccia Web:

http://localhost:4040

ngrok localhost

Tornando alla descrizione del Tunnel appena creato, le voci a cui dobbiamo fare caso sono:

  • Web Interface: tramite questo indirizzo potrai accedere ad un’interfaccia web dove puoi monitorare tutte le attività associate all’url che hai appena creato. Questo vuol dire che potrai vedere quanti utenti si stanno collegando ed altre informazioni.
  • Forwarding: questo è il link che dovrai fornire al tuo cliente. Hai entrambe le versioni, sia http che https. Lavorando in locale probabilmente userai quasi sempre l’http.
  • HTTP Requests: In questa sezione vedrai in tempo reale tutte le richieste http che vengono fatte tramite il tuo link. Ti è utile per capire se qualcuno sta guardando il sito in un dato momento.

Quindi dando al proprio cliente il link http://44c9afca.ngrok.io  quest’ultimo avra’ accesso alla root web del localhost

Questo vuol dire che se stai utilizzando MAMP o XAMPP verrà servito il file index.php all’interno della tua cartella /htdocs

Se invece utilizzi WAMP su Windows il tuo tunnel porterà gli utenti alla index.php della cartella www

Per coloro che utilizzano un Virtual Host per gestire i tuoi progetti la procedura e’
leggermente diversa ma pur sempre semplice; nella pratica bastera’ aggiungere un solo
parametro, come nell’esempio seguente:

ngrok http -host-header=miosito.dev 80

dove ovviamente al posto di “miosito.dev” metterete l’indirizzo del vostro in locale. ** WordPress per coloro che invece usano la piattaforma di WordPress si dovranno applicare altri accorgimenti per far in modo che il vostro cliente veda correttamente il sito. Questo perche’ tutti gli url che creati da WordPress sono assoluti ovvero mostrano per esteso l’indirizzo di un determinato documento. Per poter effettuare questo tipo di modifica consiglio di utilizzare un comodo tool come Relative URL , un tool che fa gia parte dei plugin consigliati da WordPress, con il quale sara’ possibile modificare URL da qualcosa come questo (esempio):

http://localhost:8080/wp/2012/09/01/hello-world/

in qualcos’altro come questo:

/wp/2012/09/01/hello-world/

Una volta effettuate tutte le modifiche del caso bisognera’ aggiornare il file wp-config.php
inserendo, prima della riga “/* i parametri dei re indirizzamenti, qualcosa del tipo:

define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);

PS:Ricordatevi di disinstallare il plugin e rimuovere le righe di codice dal file wp-config.php quando metterete il sito online.

Le configurazioni possibili con Ngrok sono davvero svariate e potete trovare tutto cio che non e’ stato contemplato in questo articolo, direttamente sul sito del progetto NGROK

NGINX ecco le ragioni per cui dovreste usarlo

nginx fast web servernginx (pronunciato come “engine-x”) è un web server/reverse proxy leggero ad alte prestazioni; è anche un server proxy di posta elettronica (IMAP / POP3), rilasciato sotto licenza BSD-like. Funziona su sistemi Unix, Linux, varianti di BSD, Mac OS X, Solaris e Microsoft Windows.

 

nginx fornisce rapidamente i contenuti statici con un utilizzo efficiente delle risorse di sistema. È possibile distribuire contenuti dinamici HTTP su una rete che utilizza i gestori FastCGI (ad esempio php5-fpm, php-fastcgi) per gli script, e può servire anche come un bilanciatore di carico software molto capace.

nginx utilizza un approccio asincrono basato su eventi nella gestione delle richieste in modo da ottenere prestazioni più prevedibili sotto stress, in contrasto con il modello del server HTTP Apache che usa un approccio orientato ai thread o ai processi nella gestione delle richieste.

nginx è più leggero e meno dispendioso di memoria rispetto ad Apache e già questo è un punto a favore del web server russo. Poi, nonostante sia più compatto, garantisce prestazioni migliori rispetto al concorrente, infatti con un bassissimo utilizzo di risorse, nginx garantisce tempi di risposta eccellenti anche in presenza di un numero molto elevato di connessioni concomitanti e, con un’occupazione di memoria pari a un quarto di quella pretesa da Apache, nginx è capace di garantire fino a quattro volte il numero di connessioni contemporanee gestite dal concorrente. Di fronte a questa verità, siti ad alto traffico come WordPress.com, YouTube e tanti altri non potevano non effettuare il cambio e spostarsi su nginx.

Secondo il Web Server Survey Netcraft di febbraio 2014, nginx è risultato essere il terzo server web più utilizzato in tutti i domini (15,00% dei siti esaminati) e il secondo server web più utilizzato per tutti i siti “attivi” (13,46% dei siti esaminati).

Una cosa importante da capire, comunque, è che nginx possiede un’architettura event-based ovvero, detta in modo semplice, non necessita di effettuare la creazione di tanti processi per quante richieste siano in esecuzione, ottimizzando l’uso di memoria al contrario di Apache che, in certi casi, può provocare problemi di memoria su WordPress o altri CMS. Apache usa infatti un thread per connessione, mentre nginx lavora in modo asincrono con thread non bloccanti, il che riduce l’uso di RAM ed ottimizza l’esecuzione dei processi.

Una delle caratteristiche che più colpisce di nginx è la capacità di supportare nativamente il load balancing, per cui possiamo utilizzare questa tecnica per scalare velocemente i server HTTP. Con il load balancing di nginx possiamo distribuire il traffico fra differenti server, definiti in un gruppo nel file “nginx.conf”, in questo modo, ad esempio, se in un particolare momento operativo dobbiamo aggiungere un nuovo webserver al nostro stack LAMP, possiamo semplicemente inserirlo nel gruppo di server gestito dal file nginx.conf. In seguito al reload della configurazione (nginx -s reload), nginx effettuerà le operazioni di load balancing fra tutti i server indicati nel file di configurazione, compreso l’ultimo appena inserito.

Anche l’installazione di nginx è semplicissima e si può effettuare da qualsiasi shell-bash con una sola riga di comando. Nello specifico sulle distribuzioni Ubuntu e Debian scriveremo:

apt-get install nginx

mentre per CentOS, Red Hat Linux Enterprise e Fedora digiteremo:

yum install nginx

Caratteristiche HTTP di base

  • Gestione dei file statici, file di indice, e auto-indicizzazione
  • Reverse proxy con caching
  • Bilanciamento del carico
  • Tolleranza agli errori
  • Supporto SSL
  • Supporto FastCGI con il caching
  • Server virtuali basati su nome ed IP
  • Streaming FLV
  • Streaming MP4, utilizzando il modulo streaming MP4
  • Autenticazione di accesso nelle pagine web
  • Compressione gzip
  • Capacità di gestire più di 10000 connessioni simultanee
  • Riscrittura degli URL
  • Log personalizzato
  • include server-side
  • resistente agli attacchi di Slowloris
  • WebDAV

Nel prossimo articolo inizieremo a vedere in modo dettagliato quali siano le migliori configurazioni.

Un sito Web chiavi in mano

bitnami_web_appsBitNami Stack :  a ognuno il suo

Oggi giorno molti, moltissimi, hanno sentito nominare parole come WordPress, Joomla, CMS ecc…, ma pochi associano questi nomi ai software necessari per il loro funzionamento.
Tra le diverse figure professionali coinvolte possiamo senza dubbio evidenziare :

  • il semplice utilizzatore, ignaro di come funzioni Internet ma che vuole crearsi un Blog
  • il web designer, che magari non conosce linguaggi di programmazione, ma e’ un dio nell’art design
  • lo sviluppatore che ama creare nuovi software ma non e’ molto competente come sistemista

Seppure la piattaforma “standard de facto” LAMP (Linux+Apache+Mysql+PHP) sia ancora quella piu’ diffusa, molte altre nuove soluzioni sono nate, con l’intento di colmare le carenze pre esistenti sui vecchi sistemi e di migliorare l’esperienza lavorativa dell’utente finale.

BitNami Stack e’ una soluzione pronta all’uso; il concetto alla base del progetto e’ che ognuno, competente o non, ha il diritto di poter utilizzare qualunque applicazione web senza dover essere necessariamente un genio dell’informatica. Ad oggi sono gia circa un centinaio le applicazioni web chiavi in mano fornite sul portale, e la lista dei coming soon e’ altrettanto lunga.

L’installazione classica e’ un’operazione molto semplice, bastera’ andare sul sito da questo link , scegliere l’applicazione web di nostro interesse, selezionare il tipo di pacchetto e scaricarlo in locale; successivamente dare i permessi di esecuzione al pacchetto e lanciarlo, le poche domande che verranno fatte serviranno semplicemente a configurare l’utenza di utilizzo dell’applicazione, la porta di connessione al DB e, se si desidera, un account mail (tramite SMTP protocol) per l’invio delle mail di notifica della App.

chmod +x bitnami-owncloud-7.0.1-0-linux-installer.run
sudo ./bitnami-owncloud-7.0.1-0-linux-installer.run

Esistono anche altre due modalita’ : Live & Cloud

Live : per tutti coloro che non intendono utilizzare direttamente le applicazioni sul proprio pc/server esiste la possibilita’ di scaricare le immagini per VMWare e, volendo, utilizzando VMWare vCenter Converter Tool, sara’ possibile utilizzarle anche con VirtualBox o Kvm.

Cloud : per chi preferisce le soluzioni Cloud, BitNami offre un servizio Cloud dedicato per l’installazione del software; in alternativa si trovano a disposizione gli script per Amazon, bastera’ scaricare il template e caricarlo successivamente su Amazon.

Con una tale facilita’ di utilizzo non mi rimane che dirvi : “testate gente, testate” !!!!

Per maggior info consiglio anche di leggere “BitNami: CMS impacchettati per tutti