Σε αυτό το άρθρο, θα ρυθμίσουμε ένα VPS για να εξυπηρετούμε εφαρμογές web Python με Gunicorn και Nginx ως αντίστροφο διακομιστή μεσολάβησης. Χρησιμοποιούμε το Nginx ως αντίστροφο διακομιστή μεσολάβησης αντί να εξυπηρετούμε απευθείας με το Gunicorn για να αποτρέψουμε επιθέσεις DoS στο Gunicorn. Η χρήση του Nginx έχει επίσης ως αποτέλεσμα καλύτερη απόδοση (με buffering διακομιστή μεσολάβησης) και έχει ως αποτέλεσμα τον χειρισμό περισσότερων αιτημάτων.
Ξεκινώντας
Αυτό το σεμινάριο προϋποθέτει ότι έχετε ήδη εγκατεστημένο, ενημερωμένο και ασφαλισμένο ένα VM με Ubuntu 14.04 ή νεότερο.
- Η παρουσία μας Nginx θα εκτελείται στη θύρα HTTP 80 (αλλά μπορείτε εύκολα να κάνετε αναβάθμιση σε HTTPS).
- Το παράδειγμα εφαρμογής μας Python θα ακούει στη θύρα 8080. Αυτή η θύρα θα κλείσει σε iptables για να αποτρέψει την απομακρυσμένη πρόσβαση.
- Αυτό το σεμινάριο θα πρέπει να εκτελείται σε άλλες διανομές με ελάχιστες αλλαγές.
Εγκατάσταση pip, virtualenv:
apt-get install python-pip python-virtualenv
Κλείστε τη θύρα 8080. Το Gunicorn θα είναι προσβάσιμο μόνο από το Nginx.
iptables -A INPUT -p tcp --destination-port 8080 -j DROP
Δημιουργήστε έναν νέο φάκελο και διαμορφώστε την εφαρμογή μας. Θα χρησιμοποιήσουμε το πλαίσιο Flask.
mkdir /var/www-folder/
cd /var/www-folder/
virtualenv exampleapp
source exampleapp/bin/activate
cd exampleapp
pip install gunicorn
pip install flask
Δημιουργήστε το αρχείο της αίτησης.
nano myapplication.py
Επικολλήστε τα παρακάτω μέσα:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, Vultr!'
Αυτό θα δημιουργήσει μια απλή σελίδα που θα λέει "Γεια σου, Vultr!" όταν κάποιος έχει πρόσβαση στη σελίδα. Τώρα, ξεκινήστε το Gunicorn. Αντικαταστήστε xμε 2 φορές τον αριθμό των πυρήνων CPU της VM σας.
gunicorn -w x myapplication:app &
Εγκαταστήστε το Nginx και διαμορφώστε τον αντίστροφο διακομιστή μεσολάβησης.
deactivate
apt-get install nginx
nano /etc/nginx/sites-enabled/default
Αναζητήστε τη location / {γραμμή και αντικαταστήστε το περιεχόμενο μέσα στις αγκύλες με το ακόλουθο περιεχόμενο.
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/;
Αυτή η διαμόρφωση δίνει εντολή στο Nginx να προωθήσει ορισμένες πληροφορίες (πρωτόκολλο HTTP, απομακρυσμένη διεύθυνση IP) μαζί με το πραγματικό αίτημα στον διακομιστή Gunicorn. Επαναφόρτωση Nginx.
service nginx reload
Σε αυτό το σημείο, η εφαρμογή σας Gunicorn έχει ρυθμιστεί σωστά. Μπορείτε να αποκτήσετε πρόσβαση σε αυτό χρησιμοποιώντας ένα πρόγραμμα περιήγησης ιστού στη διεύθυνση http://your-vps-ip/.