django servire i file multimediali sia su apache e nginx
-
26-10-2019 - |
Domanda
Io vado in modalità di produzione per il mio progetto Django, ma in esecuzione in un problema particolare. Sto correndo il mio Django attraverso apahce + mod_wsgi e servire i file statici tramite nginx.
Tuttavia la mia situazione richiede che non posso servire "tutti" i file statici da nginx. V'è la necessità di servire solo "open-flash-chart.swf" da apache. Gli usi del progetto openpyc e incorpora aperto-flash-chart.swf, che deve essere eseguito sullo stesso server come Django, che nel mio caso è Apache. Come posso fare questo? Cosa cambia per ho bisogno di fare in file di configurazione di Apache?
server {
listen 80 default;
server_name localhost;
access_log /var/log/nginx/localhost.access.log;
location / {
proxy_pass http://localhost:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
location /media/ {
root /srv/www/enpass/;
expires max;
}
}
Soluzione
In Apache, istituito un alias nel host virtuale per servire direttamente questo file:
Alias /url/to/open-flash-chart.swf /full/path/to/open-flash-chart.swf
Poi, invece di utilizzare {{ MEDIA_URL }}
fare riferimento al file, il codice nel percorso assoluto:
<object data="/url/to/open-flash-chart.swf" />
Nginx sarà ancora procura la richiesta (perché non è il vostro percorso della carta), e poi Apache consegnerà il file indietro nginx.
In alternativa, e non è raccomandato, ma se deve andare direttamente da Apache al browser, si potrebbe specificare la porta:
<object data="http://servername:8080/url/to/open-flash-chart.swf" />
Altri suggerimenti
È necessario modificare nginx config al manico
/path/to/open-flash-chart.swf
con apache, allo stesso modo l'avete fatto a / (root)