【问题标题】:Django, nginx, + gunicorn: connection refused when serving media filesDjango,nginx,+ gunicorn:提供媒体文件时连接被拒绝
【发布时间】:2016-11-12 01:40:58
【问题描述】:

我有一个由 gunicorn 提供的 Django 应用程序,nginx 处理传入的请求。静态文件提供得很好,媒体文件在我的本地开发环境中提供 - 我设置了 MEDIA_ROOTMEDIA_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,但在此之前就出现了这个问题。

【问题讨论】:

    标签: django nginx


    【解决方案1】:

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

    https://127.0.0.1
    

    代替:

    http://127.0.0.1:9900
    

    【讨论】:

    • 所以,我需要 9900,因为这是 gunicorn 正在监听的端口。但是,您关于请求的观点是有效的——事实证明这是 Django 设置的问题,所以我认为它与我的 nginx 配置有关是错误的。我不得不将 MEDIA_URL 从 /media/ 更改为 https://&lt;domain&gt;/media
    猜你喜欢
    • 2017-08-07
    • 2019-10-26
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 2017-06-04
    • 2013-11-03
    相关资源
    最近更新 更多