Обслуживание статических файлов с помощью mod_wsgi и Django - PullRequest
10 голосов
/ 09 апреля 2009

У меня есть приложение django, использующее mod_python, довольно типичная конфигурация, за исключением того, что файлы мультимедиа обслуживаются (я знаю, не рекомендуется) каталогом 'media' в корне документа. Я хотел бы протестировать и, возможно, развернуть с помощью mod_wsgi, но я не могу понять, как создать что-то простое для обслуживания статических файлов. mod_python позволяет использовать директивы Apache, такие как:

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

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

Документы django, похоже, указывают на второй блок выше как правильный способ сделать подобное исключение для mod_wsgi, но в моих тестах все, что находится ниже root, все еще отправляется в приложение wsgi. Есть ли хороший способ установить каталог статических носителей с помощью mod_wsgi, или это то, что я пытаюсь сделать намеренно без поддержки по веским техническим причинам? Ответы, указывающие на совершенно разные подходы, приветствуются.

Ответы [ 2 ]

17 голосов
/ 09 апреля 2009

Я управляю примерно дюжиной сайтов Django на одном сервере, и вот как я настраиваю медиа-URL.

Каждый VirtualHost имеет следующую конфигурацию:

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

Таким образом, я могу вносить любые изменения в обработку мультимедиа в одном файле.

Тогда мой файл 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

Это сработало очень хорошо для меня и получает A оценку от YSlow (также см. Джефф Этвуд на YSlow ).

Также обратите внимание, что для корневого каталога я использую следующую конфигурацию:

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

... который должен быть после псевдонима / носителя в вашем файле конфигурации (потому что Apache просматривает псевдонимы по порядку)

13 голосов
/ 24 июня 2009

Документация mod_wsgi объясняет, как настроить статические файлы, которые отображаются по URL-адресу, под которым монтируется приложение WSGI. См:

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

Обратите внимание, что «Options + ExecCGI» не требуется при использовании директивы WSGIScriptAlias ​​для монтирования приложения WSGI. Параметр «ExecCGI» требуется только при использовании AddHandler для монтирования приложений в качестве ресурсов.

...