10

私は mod_python を使用する django アプリケーションを持っています。これは、メディア ファイルがドキュメント ルートの (私は知っていますが、お勧めしません) 'media' ディレクトリによって提供されていることを除いて、かなり典型的な構成です。mod_wsgi でテストしてデプロイしたいのですが、静的ファイルを提供するための簡単なものを作成する方法がわかりません。mod_python では、次のような Apache ディレクティブを使用できます。

<Location '/'>
    SetHandler MyApplication.xyz.....
</Location>

<Location '/media'>
    SetHandler None
</Location>

django ドキュメントは、mod_wsgi に対して同様の例外を作成する正しい方法として上記の 2 番目のブロックを指しているようですが、私のテストでは、ルートの下のすべてが wsgi アプリに送信されています。mod_wsgi を使用して静的なメディア ディレクトリを設定する良い方法はありますか、それともやむを得ない技術的な理由で意図的にサポート対象外にしようとしていますか? まったく異なるアプローチを指す回答は大歓迎です。

4

2 に答える 2

18

私は同じサーバー上で 12 ほどの Django サイトを実行していますが、メディア URL を構成する方法は次のとおりです。

各 VirtualHost には次の構成があります。

Alias /media /path/to/media/
<Directory /path/to/media>
    Include /etc/apache2/vhosts.d/media.include
</Directory>

このようにして、1 つのファイルでメディア処理に変更を加えることができます。

次に、私の media.include ファイルは次のようになります。

Order allow,deny
Allow from all
SetHandler None
FileETag none
Options FollowSymLinks

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/gif "access plus 30 days"
    ExpiresByType image/jpg "access plus 30 days"
    ExpiresByType image/png "access plus 30 days"
    ExpiresByType image/jpeg "access plus 30 days"
    ExpiresByType text/css "access plus 30 days"
    ExpiresByType application/x-javascript "modification plus 2 years"
</IfModule>

<IfModule mod_headers.c>
    Header append Vary Accept-Encoding
</IfModule>

AddOutputFilterByType DEFLATE text/html text/css text/plain

これは私にとって非常にうまく機能し、YSlow から A 評価を得ました(YSlowJeff Atwoodも参照してください)。

また、ルートディレクトリには次の構成を使用することに注意してください。

WSGIScriptAlias / /path/to/app.wsgi
<Directory /path/to>
    Options +ExecCGI
    Allow from all
</Directory>

...これは、構成ファイルの Alias /media のにある必要があります (Apache がエイリアスを順番に調べるため)

于 2009-04-09T03:42:00.727 に答える
13

mod_wsgi のドキュメントでは、WSGI アプリケーションがマウントされている URL の下にある URL に表示される静的ファイルをセットアップする方法について説明しています。見る:

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

WSGIScriptAlias ディレクティブを使用して WSGI アプリケーションをマウントする場合、'Options +ExecCGI' は必要ないことに注意してください。「ExecCGI」オプションは、AddHandler を使用してアプリケーションをリソースとしてマウントする場合にのみ必要です。

于 2009-06-24T11:50:44.470 に答える