Dans cet article, nous allons configurer un VPS pour servir les applications Web Python avec Gunicorn et Nginx comme proxy inverse. Nous utilisons Nginx comme proxy inverse au lieu de servir directement avec Gunicorn pour empêcher les attaques DoS sur Gunicorn. L'utilisation de Nginx se traduit également par de meilleures performances (avec mise en mémoire tampon du proxy) et par le traitement de davantage de demandes.
Commencer
Ce didacticiel suppose que vous disposez déjà d'une machine virtuelle avec Ubuntu 14.04 ou plus récent installé, mis à jour et sécurisé.
- Notre instance Nginx s'exécutera sur le port HTTP 80 (mais vous pouvez facilement mettre à niveau vers HTTPS).
- Notre exemple d'application Python écoutera sur le port 8080. Ce port sera fermé sur iptables pour empêcher l'accès à distance.
- Ce didacticiel doit s'exécuter sur d'autres distributions avec des modifications minimales.
Installer pip
, virtualenv
:
apt-get install python-pip python-virtualenv
Fermez le port 8080. Gunicorn ne sera accessible que par Nginx.
iptables -A INPUT -p tcp --destination-port 8080 -j DROP
Créez un nouveau dossier et configurez notre application. Nous utiliserons le framework Flask.
mkdir /var/www-folder/
cd /var/www-folder/
virtualenv exampleapp
source exampleapp/bin/activate
cd exampleapp
pip install gunicorn
pip install flask
Créez le fichier d'application.
nano myapplication.py
Collez ce qui suit à l'intérieur:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, Vultr!'
Cela produirait une simple page disant "Bonjour, Vultr!" quand quelqu'un accède à la page. Maintenant, lancez Gunicorn. Remplacez x
par 2 fois le nombre de cœurs de processeur de votre machine virtuelle.
gunicorn -w x myapplication:app &
Installez Nginx et configurez le proxy inverse.
deactivate
apt-get install nginx
nano /etc/nginx/sites-enabled/default
Recherchez la location / {
ligne et remplacez le contenu entre parenthèses par le contenu suivant.
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/;
Cette configuration demande à Nginx de transmettre certaines informations (protocole HTTP, adresse IP distante) ainsi que la demande réelle au serveur Gunicorn. Recharger Nginx.
service nginx reload
À ce stade, votre application Gunicorn a été correctement configurée. Vous pouvez y accéder à l'aide d'un navigateur Web à l'adresse http://your-vps-ip/
.