Обслуживание статических файлов с помощью mod_wsgi и Django

У меня есть приложение 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, или то, что я пытаюсь сделать, намеренно не поддерживается по веским техническим причинам? Приветствуются ответы, указывающие на совершенно разные подходы.


person unmounted    schedule 08.04.2009    source источник


Ответы (2)


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

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

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

person Graham Dumpleton    schedule 24.06.2009
comment
Грэм Дамплтон! Спасибо за mod_wsgi! На самом деле я думаю, что изначально проблема была в порядке, я не использовал директиву cgi. Ваш модуль позволил мне сделать массу вещей, у меня действительно появилась привычка mod_wsgi с тех пор, как я задал этот вопрос. - person unmounted; 25.06.2009
comment
Двойное спасибо за документацию. Лучшие документы, которые я видел за долгое время. Желаю, чтобы их читало БОЛЬШЕ людей !!!! - person htmldrum; 17.12.2012

Я запускаю около дюжины сайтов 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 просматривает псевдонимы по порядку)

person Van Gale    schedule 09.04.2009
comment
Для вашего корневого каталога: это супер-пояс и скобки, но с точки зрения безопасности я бы поместил раздел ‹Files wsgi.py› в ваш ‹Directory› и переместил туда ваш Allow from all. - person Cheekysoft; 03.02.2014