Назад | Перейти на главную страницу

Как отделить сервер приложений wsgi django / python от веб-сервера?

Я создал приложение django / python, работающее на apache с wsgi и размещенное на одном экземпляре Amazon AWS EC2.

Это настраиваемое клиентское приложение, поэтому трафик низкий, но одна часть моего приложения генерирует отчеты, для которых требуется больше лошадиных сил, поэтому я хотел бы добавить входящий веб-сервер, который просматривает мои запросы и отправляет их одному из двух серверы приложений.

Я предполагаю, что это не совсем балансировка нагрузки, потому что я хочу обрабатывать запросы на создание документов, отличные от других запросов. Итак, я представляю себе apache на одной машине и django на другой ...

Но как люди это делают?

У меня возникли проблемы с поиском документации по этому поводу - есть ли что-то конкретное, что я мог бы искать?

К вашему сведению: Не рекомендуется, начиная с версии 1.7: поддержка FastCGI устарела и будет удалена в Django 1.9.

Я делаю такую ​​же маршрутизацию с помощью nginx и запуска django с помощью gunicorn.

Nginx просто действует как обратный прокси-сервер и может маршрутизировать ваши запросы множеством разных способов.

Задайте определение и назовите свои вышестоящие серверы приложений:

upstream main_site { server         localhost:8000;}
upstream reports   { server         172.16.12.35:8000;}

И затем маршрутизируйте запросы соответственно

location /reports {
    proxy_read_timeout 1900; #because these requests can take a while
    proxy_pass http://reports;
}
location / {
    proxy_pass http://main_site;
}

На самом деле я сделал это с двумя одинаковыми экземплярами приложения в одном и том же блоке, когда я был привязан к БД, но у сервера приложений было много сока, так что длительные отчеты не содержали бы потоки сервера приложений.

Даже если вы все еще запускаете приложение из apache / wsgi, nginx предлагает большую гибкость. Проверить это.

По-видимому, то, что я ищу, - это FastCGI, в котором есть такая возможность. Нашел ответ на Глава 21: Развертывание Django книги django, где говорится:

FastCGI - это эффективный способ разрешить внешнему приложению обслуживать страницы на веб-сервере. Веб-сервер делегирует входящие веб-запросы (через сокет) FastCGI, который выполняет код и передает ответ обратно веб-серверу, который, в свою очередь, передает его обратно в веб-браузер клиента.

Документы также объясняют Как использовать Django с FastCGI, SCGI или AJP. Похоже, я могу легко изменить путь запроса и направить его в разные экземпляры.