如何在 django 应用程序 nginx 服务器中提供媒体文件?

Sim*_*ran 6 django nginx django-media

我正在使用 nginx、gunicorn、postgresql 在生产模式(debug=false)下测试我的 django 应用程序。

虽然我能够渲染静态文件,但无法访问存储在“media”文件夹中的文件。

在我的 settings.py 中,以下是设置的变量:

 MEDIA_URL = '/media/'
 MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
 # also tried another combination: MEDIA_ROOT = 'media'
Run Code Online (Sandbox Code Playgroud)

同样在 urls.py 中 MEDIA_ROOT 设置如下:

 urlpatterns = [
   path('admin/', admin.site.urls),
   path('venter/', include('appname.urls')),
 ]+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)

在我的 /etc/nginx/sites-available/ 文件中,我有以下设置:

server {
listen 80;
server_name website.com www.website.com ;

location = /favicon.ico { access_log off; log_not_found off; }
location /static {
    root /home/a/btawebsite;
}

location /media/ {
    root /home/a/btawebsite;
}

location / {
    include proxy_params;
    proxy_pass http://unix:/home/a/myproject.sock;
}
}
Run Code Online (Sandbox Code Playgroud)

然而,在渲染存储在我的 django 数据库中的 xlsx 文件时,如下所示,它会抛出“未找到”错误。

{{file.output_file.url}}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了渲染媒体文件所需的所有配置组合,但无法实现结果。谢谢。

更新:在 settings.py 中进行以下更改

 MEDIA_URL = '/'
 MEDIA_ROOT = 'media'
Run Code Online (Sandbox Code Playgroud)

Nij*_*jo 6

如果 django 设置中的所有内容都已正确配置,您只需在 nginx conf 中添加以下内容:

location /media  {
   alias /home/user/django_app/media; #(locaion of your media folder)                                                                                       
}
Run Code Online (Sandbox Code Playgroud)


dir*_*ten 0

首先,+static()从 urls.py 中删除 。这不适用于生产,仅适用于开发。

在您的 nginx 配置中,location = /media/仅适用于精确匹配,不适用于以/media/. 去除=