Запуск нескольких сайтов из одного веб-фреймворка Python - PullRequest
4 голосов
/ 17 сентября 2008

Каковы хорошие (или, по крайней мере, умные) способы запуска нескольких сайтов из единой общей веб-среды Python (например, Pylons, TurboGears и т. Д.)? Я знаю, что вы можете выполнить перенаправление на основе домена или пути, чтобы переписать URI, чтобы он указывал на местоположение, специфичное для сайта, и я также видел некоторые грубые "if site == 'site1' / elseif / elseif / etc", которых я хотел бы избежать.

Ответы [ 4 ]

8 голосов
/ 17 сентября 2008

В Django это встроено. См. каркас сайтов .

В качестве общей методики включите столбец «хост» в схему базы данных, прикрепленный к данным, которые вы хотите привязать к хосту, а затем включите заголовок Host HTTP в запрос при получении данных.

6 голосов
/ 17 сентября 2008

Используя Django на apache с mod_python, я размещаю несколько (не связанных) сайтов django просто со следующей конфигурацией apache:

<VirtualHost 1.2.3.4>
        DocumentRoot /www/site1
        ServerName site1.com
        <Location />
                SetHandler python-program
                SetEnv DJANGO_SETTINGS_MODULE site1.settings
                PythonPath "['/www'] + sys.path"
                PythonDebug On
                PythonInterpreter site1
        </Location>
</VirtualHost>

<VirtualHost 1.2.3.4>
        DocumentRoot /www/site2
        ServerName site2.com
        <Location />
                SetHandler python-program
                SetEnv DJANGO_SETTINGS_MODULE site2.settings
                PythonPath "['/www'] + sys.path"
                PythonDebug On
                PythonInterpreter site2
        </Location>
</VirtualHost>

Нет необходимости в нескольких экземплярах Apache или прокси-серверах. Использование разных директив PythonInterpreter для каждого сайта (имя, которое вы вводите произвольно) позволяет разделить пространства имен.

2 голосов
/ 17 сентября 2008

Я использую CherryPy в качестве своего веб-сервера (который поставляется в комплекте с Turbogears), и я просто запускаю несколько экземпляров веб-сервера CherryPy на разных портах, привязанных к localhost. Затем я настраиваю Apache с mod_proxy и mod_rewrite для прозрачной пересылки запросов на соответствующий порт на основе HTTP-запроса.

1 голос
/ 17 сентября 2008

Рекомендуется использовать несколько экземпляров сервера на локальных портах, но вам не нужен полнофункциональный веб-сервер для перенаправления HTTP-запросов.

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

Что такое фунт:

  1. обратный прокси-сервер: он передает запросы от клиентских браузеров на один или несколько внутренних серверов.
  2. балансировщик нагрузки: он будет распределять запросы от клиентских браузеров между несколькими внутренними серверами, сохраняя при этом информацию о сеансе.
  3. оболочка SSL: Pound расшифровывает HTTPS-запросы от клиентских браузеров и передает их в виде простого HTTP на внутренние серверы.
  4. дезинфицирующее средство HTTP / HTTPS: Pound проверяет правильность запросов и принимает только правильно сформированные.
  5. сбой избыточного сервера: в случае сбоя внутреннего сервера Pound примет это к сведению и прекратит передавать запросы на него, пока он не восстановится.
  6. перенаправитель запросов: запросы могут быть распределены между серверами в соответствии с запрошенным URL.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...