В этой статье мы настроим VPS для обслуживания веб-приложений Python с Gunicorn и Nginx в качестве обратного прокси-сервера. Мы используем Nginx в качестве обратного прокси вместо того, чтобы работать с Gunicorn напрямую, чтобы предотвратить DoS-атаки на Gunicorn. Использование Nginx также приводит к повышению производительности (с буферизацией прокси-сервера) и приводит к обработке большего количества запросов.
Начиная
В этом руководстве предполагается, что у вас уже установлена, обновлена и защищена виртуальная машина с 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
вдвое больше ядер ЦП вашей виртуальной машины.
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/
.