Django прославился, когда небольшая американская газетная фирма открыла исходный код своего приложения еще в 2005 году. С тех пор Django превратился в наиболее широко используемый веб-фреймворк на основе Python. Django по-прежнему используется такими компаниями, как Instagram и Pinterest, и актуальность Django по-прежнему высока.
Django взаимодействует с NGINX через интерфейс шлюза веб-сервера ( WSGI ). Для Django одним из наиболее часто используемых интерфейсов WSGI является uWSGI.
Если вы еще не установили uWSGI, лучше всего установить последнюю версию через pip:
apt-get install python-pip python-dev
pip install uwsgi
Мы собираемся просто использовать базовую установку последней версии Django, которая на момент написания этого блога была 1.10.5.
Как это сделать...
Теперь мы настроим uWSGI так, чтобы он указывал на наш проект Django, который для этого примера я разместил по адресу /var/www/djangodemo. Вот uwsgi.ini файл:
[uwsgi]
socket = 127.0.0.1:8000
uid=www-data
gid=www-data
chdir=/var/www/djangodemo
module=djangodemo.wsgi
master=True
pidfile=/tmp/uwsgi-djangodemo.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi/djangodemo.log
В этом примере мы также используем сокеты TCP, а не сокеты Unix. Хотя они немного более эффективны, наличие надлежащего сокета значительно упрощает начальный этап тестирования. Если вы сталкиваетесь с ограничениями (многие тысячи одновременных подключений), я бы посоветовал вам использовать сокеты Unix.
Теперь для настройки NGINX мы будем использовать отдельный файл конфигурации ( /etc/nginx/conf.d/django.conf), чтобы все было аккуратно и аккуратно:
server {
listen 80;
server_name djangodemo.nginxcookbook.com;
access_log /var/log/nginx/djangodemo-access.log combined;
location = /favicon.ico { access_log off; log_not_found off; }
location /static|/media {
root /var/www/djangodemo/;
}
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
}
}
Как это работает....
Первый элемент конфигурации, который мы настраиваем, это favicon:
location = /favicon.ico { access_log off; log_not_found off; }
Есть очень известная история о первом развертывании Instagram (где у них было 10 000 пользователей в первый день) и нагрузке, которую favicon сгенерировало отсутствие (поскольку Django должен был выдать 404 ошибку), вызвало серьезные проблемы с масштабированием.
Затем мы обслуживаем любые загруженные и статические медиа напрямую через NGINX:
location /static|/media {
root /var/www/djangodemo/;
}
Эти каталоги отображаются через строки конфигурации STATIC_ROOT и .MEDIA_ROOT в файле для Django. NGINX очень эффективен при обслуживании статических носителей, поэтому его прямое обслуживание приводит к минимальным накладным расходам settings.py
Затем мы сопоставляем все остальные вызовы URL приложения через uwsgi протокол:
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
}
У проекта uWSGI есть нативный протокол (называемый uwsgi и в нижнем регистре), который по умолчанию встроен в NGINX. Это двоичный протокол, разработанный для обеспечения высокой эффективности и масштабируемости.
Смотрите также
Для получения дополнительной информации о проблемах и рекомендациях перейдите по следующей ссылке:
http://uwsgi-docs.readthedocs.org/en/latest/ThingsToKnow.html