django + wsgi + suexec + userdir + apache?

django + wsgi + suexec + userdir + apache?

我有一个 django 1.1 网站,我想在 wsgi 中运行(因为这似乎是 apache 上推荐的部署)。我希望它以 www 用户身份运行(apache 以 www-data 身份运行)。我理想情况下希望这能发挥作用http://主机名/~www/(~www/public_html)以及http://虚拟主机名/。我还希望这对以后可能使用 wsgi 的其他用户也有效。我能实现这一点吗?我一直在盯着文档,试图弄清楚从哪里开始,但我无法将 userdir 和 wsgi 结合起来,让我以用户 xxx 的身份为每个用户 xxx 运行 ~xxx/public_html/index.wsgi。

答案1

首先,看看 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 邮件列表来了解更多详细信息。

答案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]
    

还有一些我并不真正需要的东西:

  • 目录.conf:

    DirectoryIndex index.wsgi
    
  • wsgi.conf

    AddHandler wsgi-script .wsgi
    

相关内容