Apache-2.2

django + wsgi + suexec + userdir + apache?

  • January 3, 2016

我有一個 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 郵件列表了解更多詳細資訊。

引用自:https://serverfault.com/questions/288751