U ovom članku ćemo postaviti VPS za posluživanje Python web aplikacija s Gunicorn i Nginxom kao obrnutim proxyjem. Koristimo Nginx kao obrnuti proxy umjesto da služimo izravno s Gunicorn-om kako bismo spriječili DoS napade na Gunicorn. Korištenje Nginxa također rezultira boljom izvedbom (s proxy međuspremnikom) i rezultira više obrađenim zahtjevima.
Početak rada
Ovaj vodič pretpostavlja da već imate VM s instaliranim, ažuriranim i osiguranim Ubuntu 14.04 ili novijim.
- Naša instanca Nginxa radit će na HTTP portu 80 (ali možete jednostavno nadograditi na HTTPS).
- Naš primjer Python aplikacije će slušati na portu 8080. Ovaj port će biti zatvoren na iptablesima kako bi se spriječio daljinski pristup.
- Ovaj vodič bi trebao raditi na drugim distribucijama s minimalnim promjenama.
Instaliraj pip, virtualenv:
apt-get install python-pip python-virtualenv
Zatvorite port 8080. Gunicorn će biti dostupan samo putem Nginxa.
iptables -A INPUT -p tcp --destination-port 8080 -j DROP
Napravite novu mapu i konfigurirajte našu aplikaciju. Koristit ćemo okvir Flask.
mkdir /var/www-folder/
cd /var/www-folder/
virtualenv exampleapp
source exampleapp/bin/activate
cd exampleapp
pip install gunicorn
pip install flask
Napravite datoteku aplikacije.
nano myapplication.py
Unutra zalijepite sljedeće:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, Vultr!'
To bi proizvelo jednostavnu stranicu s natpisom "Zdravo, Vultr!" kada netko pristupi stranici. Sada pokrenite Gunicorn. Zamijenite xs 2 puta većim brojem CPU jezgri vašeg VM-a.
gunicorn -w x myapplication:app &
Instalirajte Nginx i konfigurirajte obrnuti proxy.
deactivate
apt-get install nginx
nano /etc/nginx/sites-enabled/default
Potražite location / {redak i zamijenite sadržaj unutar zagrada sljedećim sadržajem.
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/;
Ova konfiguracija daje upute Nginxu da proslijedi neke informacije (HTTP protokol, udaljena IP adresa) zajedno sa stvarnim zahtjevom na Gunicorn poslužitelj. Ponovno učitajte Nginx.
service nginx reload
U ovom trenutku, vaša Gunicorn aplikacija je ispravno konfigurirana. Možete mu pristupiti putem web-preglednika na adresi http://your-vps-ip/.