django + wsgi + suexec + userdir + apache?

У меня есть веб-сайт django 1.1, который я хочу запустить в wsgi (так как это, кажется, рекомендуемое развертывание на apache). Я хочу, чтобы он работал как пользователь www (apache работает как www-data). В идеале мне бы хотелось, чтобы это работало как с http://hostname/~www/ (~ www / public_html), так и с http://virtualhostname/. Я также хочу, чтобы это работало для других пользователей, которые могут позже использовать wsgi. Могу ли я сделать это? Я смотрел на документы, пытаясь понять, с чего начать, но у меня возникают проблемы при объединении userdir и wsgi, чтобы я мог запустить ~ xxx / public_html / index.wsgi от имени пользователя xxx для каждого пользователя xxx.

2 ответа

Решение

Моя конкретная проблема была решена следующим образом:

  • В блоке 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
    

Для начала посмотрите на режим демона mod_wsgi. Это позволяет делегировать приложения WSGI для запуска в отдельных процессах демона. Затем эти процессы могут быть запущены от имени указанного пользователя без необходимости использования suxec. Увидеть:

http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide

Для исчерпания настроенного каталога UserDir, когда пользователь может контролировать, где монтируются приложения, вы не можете использовать WSGIScriptAlias, и вместо этого вам нужно использовать метод AddHandler для настройки mod_wsgi. Увидеть:

http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines

Директива UserDir неявно предоставляет директиву Alias, поэтому вам нужно только беспокоиться о директиве AddHandler и т. Д.

Однако обратите внимание, что из-за правил приоритета в Apache вы, вероятно, не сможете использовать WSGIScriptAlias ​​в "/" для того же общего виртуального хоста, который может маскировать пользовательские каталоги. Просто означает, что вам нужно положиться на AddHandler с исправлением mod_rewrite, если он монтируется в корне сайта, как описано в последней части этого раздела документации.

Предлагаем вам использовать официальный список рассылки mod_wsgi для более подробной информации.

Другие вопросы по тегам