【发布时间】: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 -
root和alias
当我尝试访问 /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; }´ 有效。感觉有点尴尬……