[英]Serving static files with mod_wsgi and Django
我有一個使用mod_python的django應用程序,相當典型的配置,除了媒體文件由文檔根目錄中的(我知道,不推薦)'media'目錄提供服務。 我想測試並使用mod_wsgi進行部署,但我無法弄清楚如何創建簡單的服務靜態文件。 mod_python允許使用Apache指令,如:
<Location '/'>
SetHandler MyApplication.xyz.....
</Location>
<Location '/media'>
SetHandler None
</Location>
django文檔似乎指向上面的第二個塊作為為mod_wsgi制作類似異常的正確方法,但在我的測試中,根目錄下的所有內容仍然被發送到wsgi應用程序。 有沒有一個很好的方法用mod_wsgi設置一個靜態媒體目錄,或者我是否因為引人注目的技術原因故意不支持? 歡迎指出完全不同的方法的答案。
我在同一台服務器上運行了十幾個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
這對我來說非常有效,並從YSlow獲得A等級( 在YSlow上也見到Jeff Atwood )。
另請注意,對於根目錄,我使用以下配置:
WSGIScriptAlias / /path/to/app.wsgi
<Directory /path/to>
Options +ExecCGI
Allow from all
</Directory>
...應該在配置文件中的Alias / media 之后 (因為Apache按順序查看別名)
mod_wsgi文檔解釋了如何設置靜態文件,這些文件出現在安裝了WSGI應用程序的URL下面。 看到:
http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#Hosting_Of_Static_Files
請注意,使用WSGIScriptAlias指令安裝WSGI應用程序時不需要“Options + ExecCGI”。 只有在使用AddHandler將應用程序作為資源掛載時,才需要“ExecCGI”選項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.