Django,nginx,+ gunicorn:连接媒体文件时拒绝连接

时间:2016-07-09 17:25:03

标签: django nginx

我有一个由gunicorn提供的Django应用程序,nginx处理传入的请求。静态文件提供得很好,媒体文件在我的本地开发环境中提供 - 我设置了MEDIA_ROOTMEDIA_URL

但是,在我的网络主机(运行Ubuntu 14.04)上,不提供媒体文件。即使我运行Django dev服务器而不是让gunicorn为应用程序提供服务,媒体文件也不会显示,并且以下错误会输出到控制台:

Chrome dev console output

由于将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,但这个问题甚至在此之前就已经发生了。

1 个答案:

答案 0 :(得分:2)

看起来你直接向gunicorn请求而不是nginx,你应该访问配置:

https://127.0.0.1

而不是:

http://127.0.0.1:9900