Question

J'ai une application Django utilisant MOD_PYTHON, une configuration assez typique, sauf que les fichiers multimédias sont desservis par un répertoire (je sais, non recommandé) dans la racine du document. Je voudrais tester et peut-être déployer avec mod_wsgi, mais je ne peux pas comprendre comment créer quelque chose de simple pour servir des fichiers statiques. mod_python permet d'utiliser des directives Apache comme:

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

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

Les Django Docs semblent pointer vers le deuxième bloc ci-dessus comme la bonne façon de faire une exception similaire pour MOD_WSGI, mais dans mes tests, tout ce qui est en dessous de la racine est toujours envoyé à l'application WSGI. Existe-t-il un bon moyen de définir un répertoire de médias statique avec MOD_WSGI, ou ce que j'essaie de faire intentionnellement non pris en charge pour des raisons techniques convaincantes? Les réponses à ce point vers des approches entièrement différentes sont les bienvenues.

Était-ce utile?

La solution

La documentation MOD_WSGI explique comment configurer des fichiers statiques qui apparaissent dans une URL sous ce à quoi l'application WSGI est montée. Voir:

http://code.google.com/p/modwsgi/wiki/configurationguidelines#hosting_of_static_files

Notez que «Options + EXECCGI» n'est pas nécessaire lors de l'utilisation de la directive WSGiscriptalias pour monter l'application WSGI. L'option «EXECCGI» n'est requise que lorsque vous utilisez AddHandler pour monter les applications comme ressources.

Autres conseils

J'exécute une douzaine de sites Django sur le même serveur et voici comment je configure les URL multimédias.

Chaque VirtualHost a la configuration suivante:

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

De cette façon, je peux apporter des modifications à la gestion des médias dans un seul fichier.

Ensuite, mon fichier media.include ressemble à ceci:

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

Cela a très bien fonctionné pour moi et obtient un UN noter de Yslow (regarde aussi Jeff Atwood sur Yslow).

Remarquez également, pour le dir racine, j'utilise la configuration suivante:

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

... qui devrait être après l'alias / support dans votre fichier de configuration (car Apache regarde les alias dans l'ordre)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top