Как бы вы настроили веб-сервер Python с несколькими виртуальными хостами?
-
22-08-2019 - |
Вопрос
Мне сказали, что лучше всего использовать wsgi, а не mod_python.Но более конкретно, как бы вы настроили серверную среду с несколькими веб-сайтами?Выбор веб-сервера и т.д.?
Решение
Apache+mod_wsgi — распространенный выбор.
Вот простой пример виртуального хоста, настроенного для сопоставления любых запросов к /wsgi/something приложению (которое затем может просмотреть PATH_INFO, чтобы выбрать действие, или как вы выполняете диспетчеризацию).Корневой URL-адрес «/» также направляется в приложение WSGI.
LoadModule wsgi_module /usr/local/lib/mod_wsgi.so
...
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /www/example/htdocs
WSGIScriptAliasMatch ^/$ /www/example/application.py
WSGIScriptAlias /wsgi /www/example/application.py
</VirtualHost>
Если хотите, вы можете использовать директиву WSGIProcessGroup для разделения обработчиков для разных виртуальных хостов.Если вам нужно, чтобы сценарии виртуальных хостов запускались под разными пользователями, вам нужно будет использовать WSGIDaemonProcess вместо встроенного интерпретатора Python.
application.py при запуске оставит вызываемый вами WSGI в глобальной переменной application.Вы также можете добавить нижний колонтитул «Запуск от имени» для совместимости со старой школой CGI:
#!/usr/bin/env python
from mymodule import MyApplication
application= MyApplication()
if __name__=='main':
import wsgiref.handlers
wsgiref.handlers.CGIHandler().run(application)
Другие советы
Я бы порекомендовал Nginx в качестве веб-сервера.Быстрая и простая настройка.
Вероятно, вам захочется иметь одного пользователя unix на каждый виртуальный хост, чтобы каждый домашний каталог содержал свое собственное приложение, среду Python и конфигурацию сервера.Это позволяет вам безопасно перезапустить определенное приложение, просто убив рабочие процессы, принадлежащие вашему виртуальному хосту.
Просто совет, надеюсь, он поможет.
Вы можете использовать Apache и mod_wsgi.Таким образом, вы по-прежнему можете использовать встроенную поддержку Apache для виртуальных хостов.