Запуск нескольких сайтов из одной веб-инфраструктуры Python
-
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-запросов.
я хотел бы использовать фунт в качестве обратного прокси для выполнения этой работы.Он маленький, быстрый, простой и делает именно то, что нам нужно.
ЧТО ТАКОЕ ФУНТ:
- обратный прокси:он передает запросы от клиентских браузеров на один или несколько внутренних серверов.
- балансировщик нагрузки:он будет распределять запросы от клиентских браузеров между несколькими внутренними серверами, сохраняя при этом информацию о сеансе.
- SSL-обертка:Pound будет расшифровывать HTTPS-запросы от клиентских браузеров и передавать их как обычный HTTP на внутренние серверы.
- дезинфицирующее средство HTTP/HTTPS:Pound будет проверять запросы на корректность и принимать только правильно сформированные.
- отказоустойчивый сервер:Если внутренний сервер выйдет из строя, Pound примет это к сведению и прекратит передавать на него запросы до тех пор, пока он не восстановится.
- перенаправитель запроса:запросы могут распределяться между серверами в соответствии с запрошенным URL.