Назад | Перейти на главную страницу

django + wsgi + suexec + userdir + apache?

У меня есть веб-сайт 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