django + wsgi + suexec + userdir + apache?

我有一个django 1.1网站,我想运行在wsgi(因为这似乎是推荐部署在Apache)。 我希望它以www用户身份运行(apache以www数据运行)。 我理想喜欢这个工作的http://主机名/〜www / (〜www / public_html)以及http:// virtualhostname / 。 我也希望这可以为以后使用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

对于用户可以控制应用程序安装位置的UserDirconfiguration目录而言,不能使用WSGIScriptAlias,而是需要使用AddHandler方法来设置mod_wsgi。 看到:

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

UserDir指令隐含地提供了Alias指令,所以你只需要担心AddHandler指令等等

但请注意,由于Apache中的优先规则,您可能无法使用WSGIScriptAlias('/')作为可能掩盖用户目录的整个虚拟主机。 只是意味着你需要依靠AddHandler,如果在站点的根目录下安装mod_rewrite修正,如文档的该部分的后半部分所述。

build议你使用官方的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