In questo articolo, configureremo un VPS per servire le applicazioni Web Python con Gunicorn e Nginx come proxy inverso. Usiamo Nginx come proxy inverso invece di servire direttamente con Gunicorn per prevenire attacchi DoS su Gunicorn. L'uso di Nginx migliora anche le prestazioni (con proxy buffering) e comporta la gestione di più richieste.
Iniziare
Questo tutorial presuppone che tu abbia già una VM con Ubuntu 14.04 o più recenti installati, aggiornati e protetti.
- La nostra istanza Nginx verrà eseguita sulla porta HTTP 80 (ma puoi facilmente eseguire l'aggiornamento a HTTPS).
- La nostra app Python di esempio ascolterà sulla porta 8080. Questa porta verrà chiusa su iptables per impedire l'accesso remoto.
- Questo tutorial dovrebbe essere eseguito su altre distro con modifiche minime.
Installare pip
, virtualenv
:
apt-get install python-pip python-virtualenv
Chiudere la porta 8080. Gunicorn sarà raggiungibile solo da Nginx.
iptables -A INPUT -p tcp --destination-port 8080 -j DROP
Crea una nuova cartella e configura la nostra applicazione. Useremo il framework Flask.
mkdir /var/www-folder/
cd /var/www-folder/
virtualenv exampleapp
source exampleapp/bin/activate
cd exampleapp
pip install gunicorn
pip install flask
Crea il file dell'applicazione.
nano myapplication.py
Incolla quanto segue all'interno:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, Vultr!'
Ciò produrrebbe una semplice pagina che dice "Ciao, Vultr!" quando qualcuno accede alla pagina. Adesso avvia Gunicorn. Sostituisci x
con 2 volte il numero di core della CPU della tua VM.
gunicorn -w x myapplication:app &
Installa Nginx e configura il proxy inverso.
deactivate
apt-get install nginx
nano /etc/nginx/sites-enabled/default
Cerca la location / {
riga e sostituisci il contenuto tra parentesi con il seguente contenuto.
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8000/;
Questa configurazione indica a Nginx di inoltrare alcune informazioni (protocollo HTTP, indirizzo IP remoto) insieme alla richiesta effettiva al server Gunicorn. Ricarica Nginx.
service nginx reload
A questo punto, l'applicazione Gunicorn è stata configurata correttamente. È possibile accedervi utilizzando un browser Web all'indirizzo http://your-vps-ip/
.