Запуск нескольких сайтов из одной веб-инфраструктуры Python

StackOverflow https://stackoverflow.com/questions/85119

  •  01-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

В Django это встроено.Видеть структура сайтов.

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

Другие советы

Используя 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 для каждого сайта (вводимое вами имя произвольное) позволяет разделить пространства имен.

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

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

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

ЧТО ТАКОЕ ФУНТ:

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