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 的身份執行 ~xxx/public_html/index.wsgi,為每個使用者 xxx 執行。
我的具體問題通過以下方式解決:
- 在 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
對於初學者來說,看看 mod_wsgi 守護程序模式。這允許您委託 WSGI 應用程序在不同的守護程序中執行。然後可以使這些程序以指定使用者身份執行,而無需使用 suxec。看:
http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide#Delegation_To_Daemon_Process
對於使用者控制應用程序安裝位置的使用者目錄配置目錄,您不能使用 WSGIScriptAlias 而是需要使用 AddHandler 方法來設置 mod_wsgi。看:
http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#The_Apache_Alias_Directive
UserDir 指令隱式提供 Alias 指令,因此您只需要擔心 AddHandler 指令等。
但是請注意,由於 Apache 中的優先規則,您可能無法在“/”處使用 WSGIScriptAlias 來作為可能掩蓋使用者目錄的同一整體虛擬主機。只是意味著您需要使用帶有 mod_rewrite 修復程序的 AddHandler,如果安裝在站點的根目錄上,如文件該部分的後半部分所述。
建議您使用官方 mod_wsgi 郵件列表了解更多詳細資訊。