Установка и настройка Django с NGINX (uWSGI)

Настройка NGINX для Django

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

Вас заинтересует / Intresting for you:

Настройка и использование Joom...
Настройка и использование Joom... 1482 просмотров Гвен Mon, 21 Mar 2022, 14:19:59
Настройка NGINX для CMS WordPr...
Настройка NGINX для CMS WordPr... 1784 просмотров Гвен Mon, 21 Mar 2022, 14:19:47
Как увеличить время ожидания з...
Как увеличить время ожидания з... 5383 просмотров Андрей Васенин Tue, 18 Jan 2022, 16:19:41
Как работает фильтр Google Pag...
Как работает фильтр Google Pag... 1434 просмотров Игорь Воронов Sat, 14 Mar 2020, 17:58:50
Войдите чтобы комментировать