web-dev-qa-db-ja.com

django + wsgi + suexec + userdir + apache?

私はwsgiで実行したいDjango 1.1 Webサイトを持っています(これはApacheで推奨される展開のようです)。wwwユーザーとして実行したいです(Apacheはとして実行されています) www-data)。理想的には、これが http:// hostname/〜www / (〜www/public_html)と同様に機能することを望みます。 http:// virtualhostname / 。後でwsgiを使用する可能性のある他のユーザーにもこれを機能させたいのですが、これを実現できますか?どこから始めればよいかを理解しようとしているドキュメントを見つめていますが、userdirとwsgiを組み合わせて、すべてのユーザーxxxに対してユーザーxxxとして〜xxx/public_html /index.wsgiを実行させるのに問題があります。

2
Jayen

私の特定の問題は次の方法で解決されました:

  • 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
    
0
Jayen

手始めに、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を使用できない可能性があることに注意してください。ドキュメントのそのセクションの後半で説明されているように、サイトのルートにマウントする場合は、mod_rewriteフィックスアップを使用してAddHandlerに依存する必要があることを意味します。

詳細については、公式のmod_wsgiメーリングリストを使用することをお勧めします。

1