【问题标题】:Bypass Django to serve static files with Nginx绕过 Django 以使用 Nginx 提供静态文件
【发布时间】:2018-05-26 00:18:52
【问题描述】:

我正在尝试使用 Nginx 提供静态文件,但似乎 Django 控制了路径并不断给出 404,因为它不是 Django 应用程序中的有效 URL。

这是 Nginx 服务器设置:

server {
    listen       443;
    server_name  localhost;

    client_max_body_size 500M;

    location /static/ {
        autoindex on;
        root /app/interfaces/web/static;
    }

    location / {
        uwsgi_pass django;
        include /app/interfaces/web/django/uwsgi_params;
    }
}

我已经尝试了以下所有组合:

  • /static//static
  • 有和没有autoindex on
  • rootalias

当我尝试访问 /static/ 目录中的文件时,我从 Django 收到以下 404 错误:

找不到页面 (404)

请求方法:GET请求

网址:https://172.16.6.158/static/test.css

使用 django.urls 中定义的 URLconf,Django 尝试了这些 URL 模式,按以下顺序:

^ ^$ [name='index']

^历史/

^配置/

^admin/

当前路径 static/test.css 与其中任何一个都不匹配。

我还尝试在 Django 设置中设置 STATIC_URL,但我认为这不是必需的,因为我试图绕过 Django。反正也没什么区别。

有谁知道我做错了什么?我是否需要在其他地方更改配置。

更新

Nginx 访问日志报如下错误:

172.16.6.108 - - [11/Dec/2017:11:53:11 +0000] "GET /static/test.css HTTP/1.1" 404 3132 "-" "Mozilla/5.0 (Windows NT 6.1; Win64 ; x64) AppleWebKit/537.36(KHTML,如 Gecko)Chrome/61.0.3163.100 Safari/537.36" "-"

错误日志中没有任何内容。

使用的设置:

location /static/ {
    alias /app/interfaces/web/static;
}

【问题讨论】:

  • 首先,如果你有带有/static 的路径,那么你需要使用alias 指令而不是root。接下来你应该告诉你在 Nginx 访问和错误日​​志中看到的内容。你也不需要autoindex on;这个东西
  • 我用访问日志的结果更新了问题
  • 您确定没有其他 nginx 配置存在冲突吗?因为server_name 是本地主机,但您使用的是 IP,所以我不确定它是否正确。可以肯定的是,将日志记录参数添加到不同的文件以确保您看到正在触发的配置。
  • 你是对的。原来这是我测试的错误配置文件。 'location /static { 别名 /app/interfaces/web/static; }´ 有效。感觉有点尴尬……

标签: django nginx


【解决方案1】:

将此代码放入服务器块中

# Django media location 
 location  /media { alias /home/username/djangoproject/media; }

 location /static { alias /home/username/djangoproject/app/static;}
 # your Django project's static files `

您还需要将静态 url 和媒体 url 添加到 urlpattern .google 以在 django 中提供静态文件

【讨论】:

    猜你喜欢
    • 2011-01-27
    • 2013-06-27
    • 2021-12-02
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 2019-02-22
    • 2022-11-10
    相关资源
    最近更新 更多