簡體   English   中英

使用mod_wsgi和Django提供靜態文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM