Django在Apache和Nginx上使用媒体文件
-
26-10-2019 - |
题
我正在为我的Django项目进入生产模式,但遇到了一个特殊的问题。我正在通过apahce+mod_wsgi运行我的django,并通过nginx运行静态文件。
但是,我的情况要求我无法从NGINX提供“所有”静态文件。需要从Apache提供“ open-flash-chart.swf”。该项目使用OpenPYC和嵌入Open-flash-chart.swf,它需要与Django在同一服务器上运行,在我的情况下,这是Apache。我该怎么做?我需要在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;
}
}
解决方案
在Apache中,在您的虚拟主机中设置一个别名直接服务此文件:
Alias /url/to/open-flash-chart.swf /full/path/to/open-flash-chart.swf
然后,而不是使用 {{ MEDIA_URL }}
要引用文件,请在绝对路径中代码:
<object data="/url/to/open-flash-chart.swf" />
nginx仍将代表请求(因为它不是您的媒体路径),然后Apache将把文件交付给NGINX。
另外,不建议,但是如果必须直接从Apache到浏览器,则可以指定端口:
<object data="http://servername:8080/url/to/open-flash-chart.swf" />
其他提示
您需要更改nginx配置以处理
/path/to/open-flash-chart.swf
使用Apache,您为 /(root)做同样的方法
不隶属于 StackOverflow