【发布时间】:2016-11-12 01:40:58
【问题描述】:
我有一个由 gunicorn 提供的 Django 应用程序,nginx 处理传入的请求。静态文件提供得很好,媒体文件在我的本地开发环境中提供 - 我设置了 MEDIA_ROOT 和 MEDIA_URL。
但是,在我的网络主机(运行 Ubuntu 14.04)上,不提供媒体文件。即使我运行 Django 开发服务器而不是让 gunicorn 为应用程序提供服务,媒体文件也不会显示,并且以下错误会输出到控制台:
由于将 gunicorn 排除在外会导致相同的行为,因此我认为问题出在我的 nginx 配置上。这是我的应用程序sites-available:
server {
listen 443 ssl;
server_name <server name here>;
<ssl stuff here>
access_log off;
location /static {
alias /opt/testenv/testenv/proj/static/;
}
location /media {
autoindex on;
alias /opt/testenv/testenv/proj/media/;
}
location ~ /.well-known {
allow all;
}
location / {
proxy_pass http://127.0.0.1:9900;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
}
}
server {
listen 80;
server_name <server name here>;
return 301 https://$host$request_uri;
}
我最初错过了location /media 块,我认为这是问题所在。但是,即使在添加它、重新启动 nginx 并运行 collectstatic 之后,我在尝试检索文件时仍然会收到 CONNECTION REFUSED 错误。
我打开了自动索引以验证文件是否可以手动导航到,并且确实有效。
nginx 错误日志不包含与这些连接错误相关的任何内容,这让我很奇怪——请求会在其他地方被拒绝吗?我最近设置了 HTTPS,但在此之前就出现了这个问题。
【问题讨论】: