У меня есть веб-сайт django 1.1, который я хочу запустить в wsgi (как представляется, это рекомендуемое развертывание на apache). Я хочу, чтобы он запускался как пользователь www (apache работает как www-data). Я бы в идеале хотел, чтобы это работало из http: // имя хоста / ~ www / (~ www / public_html), а также http: // имя виртуального хоста /. Я также хочу, чтобы это работало для других пользователей, которые позже могут использовать wsgi. Могу ли я это сделать? Я смотрел документы, пытаясь понять, с чего начать, но у меня возникли проблемы с объединением userdir и wsgi, чтобы позволить мне запустить ~ xxx / public_html / index.wsgi от имени пользователя xxx для каждого пользователя xxx.
Для начала посмотрите режим демона mod_wsgi. Это позволяет вам делегировать приложения WSGI для запуска в отдельных процессах демона. Затем эти процессы можно запустить от имени указанного пользователя без необходимости использования suxec. Видеть:
http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide#Delegation_To_Daemon_Process
Для выхода из настроенного каталога UserDir, когда пользователь может контролировать, где монтируются приложения, вы не можете использовать WSGIScriptAlias, а вместо этого нужно использовать метод AddHandler для настройки mod_wsgi. Видеть:
http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#The_Apache_Alias_Directive
Директива UserDir неявно предоставляет директиву Alias, поэтому вам нужно беспокоиться только о директиве AddHandler и т. Д.
Однако обратите внимание, что из-за правил приоритета в Apache вы, вероятно, не сможете использовать WSGIScriptAlias в '/' для того же общего виртуального хоста, который может маскировать пользовательские каталоги. Это просто означает, что вам нужно полагаться на AddHandler с исправлением mod_rewrite при монтировании в корень сайта, как описано в последней части этого раздела документации.
Предлагаем вам использовать официальный список рассылки mod_wsgi для получения более подробной информации.
Моя конкретная проблема была решена следующим образом:
В блоке VirtualHost:
DocumentRoot /home/www/public_html
WSGIDaemonProcess ~www user=www group=www
В userdir.conf:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/~([^/]+)
RewriteRule . - [E=URL_USER:~%1]
WSGIProcessGroup %{ENV:URL_USER}
В ~ www / public_html / .htaccess
Options +ExecCGI
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /~www/index.wsgi/$1 [QSA,PT,L]
RewriteRule ^$ /~www/index.wsgi/$1 [QSA,PT,L]
И кое-что, что мне действительно не нужно:
dir.conf:
DirectoryIndex index.wsgi
wsgi.conf
AddHandler wsgi-script .wsgi