En aquest article, configurarem un VPS per servir aplicacions web de Python amb Gunicorn i Nginx com a servidor intermediari invers. Utilitzem Nginx com a servidor intermediari invers en lloc de servir directament amb Gunicorn per evitar atacs DoS a Gunicorn. L'ús de Nginx també dóna lloc a un millor rendiment (amb la memòria intermèdia intermedia) i fa que es gestionen més sol·licituds.
Començant
Aquest tutorial suposa que ja teniu una màquina virtual amb Ubuntu 14.04 o posterior instal·lada, actualitzada i segura.
- La nostra instància Nginx s'executarà al port HTTP 80 (però podeu actualitzar fàcilment a HTTPS).
- La nostra aplicació Python d'exemple escoltarà al port 8080. Aquest port es tancarà a iptables per evitar l'accés remot.
- Aquest tutorial hauria d'executar-se en altres distribucions amb canvis mínims.
Instal·lar pip, virtualenv:
apt-get install python-pip python-virtualenv
Tanqueu el port 8080. Només Nginx podrà accedir a Gunicorn.
iptables -A INPUT -p tcp --destination-port 8080 -j DROP
Creeu una nova carpeta i configureu la nostra aplicació. Farem servir el marc de Flask.
mkdir /var/www-folder/
cd /var/www-folder/
virtualenv exampleapp
source exampleapp/bin/activate
cd exampleapp
pip install gunicorn
pip install flask
Creeu el fitxer de l'aplicació.
nano myapplication.py
Enganxeu el següent dins:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, Vultr!'
Això produiria una pàgina senzilla que digués "Hola, Vultr!" quan algú accedeix a la pàgina. Ara, comença Gunicorn. Substituïu xamb 2 vegades el nombre de nuclis de CPU de la vostra VM.
gunicorn -w x myapplication:app &
Instal·leu Nginx i configureu el servidor intermediari invers.
deactivate
apt-get install nginx
nano /etc/nginx/sites-enabled/default
Cerqueu la location / {línia i substituïu el contingut dins dels parèntesis pel contingut següent.
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/;
Aquesta configuració indica a Nginx que reenviï informació (protocol HTTP, adreça IP remota) juntament amb la sol·licitud real al servidor Gunicorn. Torna a carregar Nginx.
service nginx reload
En aquest punt, la vostra aplicació Gunicorn s'ha configurat correctament. Podeu accedir-hi mitjançant un navegador web a http://your-vps-ip/.