【问题标题】:Can't upload media files using django + nginx无法使用 django + nginx 上传媒体文件
【发布时间】:2016-04-14 00:38:01
【问题描述】:

我正在使用基于 andrecp git 的 django+nginx - https://github.com/andrecp/django-tutorial-docker-nginx-postgres

这是 nginx.conf 文件:

worker_processes 1;

events {

    worker_connections 1024;

}

http {

    include /etc/nginx/mime.types;

    gzip on;
    gzip_proxied any;
    gzip_types text/plain text/xml text/css application/x-javascript;
    gzip_vary on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";


    server {
        listen 80;
        server_name mysite.com;

        client_max_body_size 20M;
        charset     utf-8;

        access_log /dev/stdout;
        error_log /dev/stdout info;

        location /static {
            alias /usr/src/app/static;
        }

        location /static/myapp/js/ {
          default_type text/javascript;
          alias /usr/src/app/static/myapp/js/;
        }

        location /static/myapp/css/ {
          default_type text/css;
          alias /usr/src/app/static/myapp/css/;
        }

        location /media {
            alias /usr/src/app/media;
        }

        location / {
            proxy_pass http://django:8000;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
        }
    }
}

这是我的模型:

class RSSfeeds(models.Model):
    site_name = models.CharField('Site Name', max_length=100)
    feed_name = models.CharField('Feed Name', max_length=100)
    feed_url = models.CharField('URL', max_length=1000)
    img = models.ImageField('Image', upload_to='img/', null=True, blank=True)

我的网站上有一个带有图片上传输入的简单表单。 当我在 DEBUG=TRUE 时,文件正在按预期上传,但我认为 django 处理它们而不是 Nginx(因为它们被放置在 django 文件夹中)。 当 DEBUG=False 没有任何反应 - 我发送表单,文本数据被正确存储,但图像没有被保存。

我做错了什么?

谢谢!

更新:

server {
        listen 80;
        server_name yourserver.com;

        client_max_body_size 50M;
        charset     utf-8;

        location /static {
            alias /www/static;
        }

        location /media {
            alias /www/media;
        }

        location / {
            proxy_pass http://django:8000;
            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;
            proxy_set_header   X-Forwarded-Host $server_name;

        }
    }

【问题讨论】:

  • 你在这方面有什么收获吗?我得到相同的结果。虽然我的上传开始工作,但他们不再。真奇怪
  • 我解决了,但我不得不承认我不记得问题出在哪里。如果有帮助,我在我的问题中添加了一个简单的服务器配置

标签: python django postgresql nginx


【解决方案1】:

您应该确保您的 MEDIA_ROOT 目录对运行应用程序服务器的用户是可写的。

在您的情况下,应用程序服务器应该是 Gunicorn。假设运行 Gunicorn 的用户是 www-data ,您应该确保执行此命令以让应用服务器写入 MEDIA_ROOT 目录。

sudo chown www-data.www-data /www/media

您可以在此处找到有关使用 NGINX 部署 Django 的更多信息:https://www.guguweb.com/2019/11/13/django-nginx-deploy-your-django-project-on-a-production-server/

【讨论】:

    猜你喜欢
    • 2014-10-20
    • 2020-11-29
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 2011-06-16
    • 2015-10-06
    相关资源
    最近更新 更多