2009-04-08 46 views
9

我有一个使用mod_python的django应用程序,除了媒体文件由文档根目录中的一个(我知道的,不推荐的)'media'目录提供服务之外。我想测试,也许部署与mod_wsgi,但我不知道如何创建一些简单的服务静态文件。 mod_python的可以像使用Apache指令:使用mod_wsgi和Django服务静态文件

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

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

Django文档似乎指向第二块上面正确的方式作出的mod_wsgi类似的例外,但在我的测试下面的根一切仍被发送到wsgi应用程序。有没有一种很好的方式设置一个静态媒体目录与mod_wsgi,或者是我试图做故意不支持引人注目的技术原因?欢迎提供完全不同方法的答案。

回答

13

mod_wsgi文档介绍了如何设置显示在WSGI应用程序所在的URL下方的静态文件。请参阅:

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

注意,使用WSGIScriptAlias指令来安装WSGI应用程序时 '选项+ ExecCGI' 是不需要。仅当使用AddHandler将应用程序安装为资源时,才需要'ExecCGI'选项。

+0

Graham Dumpleton!感谢mod_wsgi!其实我认为订单原来是问题,我没有使用cgi指令。你的模块使我能够做很多事情,自从问这个问题后,我确实开发了一个mod_wsgi习惯。 – unmounted 2009-06-25 00:01:07

17

我在同一台服务器上运行了一打左右的Django站点,这里是我配置媒体URL的方式。

每个虚拟主机具有以下配置:

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 

这工作对我非常好,并得到一个一个YSlow等级(见Jeff Atwood on YSlow)。

还要注意,对于根目录,我使用以下配置:

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

...在配置文件中的别名/媒体(后应因为Apache着眼于以别名)

+0

对于你的根目录:它是超级带子和大括号,但是从安全性角度来看,我会在你的中放置一个部分,并将你的“Allow from all”移动到那里。 – Cheekysoft 2014-02-03 16:27:07

相关问题