这有点难以描述。我基本上希望 nginx 使用 autoindex 而不是设置的 index.html 文件(如果?listing=true
URI 中有的话)进行响应。
我已经尝试将它放在我的里面location / {...}
,以使其没有任何索引可显示:
if ($arg_listing = "true") {
index =404;
add_header Content-Type application/json;
return 200;
}
但这使得 nginx 服务无法启动,因为显然你不能在 if 块内有index
或autoindex
。我知道 if 块至少可以工作,因为如果我删除 ,就会返回 200 index
。
我对使用 nginx 经验不多,所以我不知道该怎么做。以下是完整/etc/nginx/sites-enabled/default
配置: https: //pastebin.com/iRiMpCk9
编辑:更改了 Pastebin 链接,因为之前是错误的。
实际上,
if
nginx 指令在上下文中使用时location
,与命令式编程语言中的类似构造几乎没有共同之处。著名的lua-nginx-module和OpenResty包的作者张一春对此指令的实际工作原理提供了最好的解释之一。事实上,每个指令都会隐式创建一个嵌套位置,该位置会尝试从父位置继承所有声明。但是,在所谓的“ in ”上下文中可以使用哪些指令存在某些限制(如果可以,文档中会明确说明),而您刚刚遇到了其中之一(该指令不能在此上下文中使用)。解决这种情况的最常见方法是使用变量作为这些指令的参数。if
if
location
autoindex
不幸的是,并非所有 nginx 指令都允许使用变量作为其参数(通常,如果可能的话,会在相应指令的文档中明确说明)。特别是,指令不支持将其参数指定为值可以是或 的
autoindex
变量。因此,实际上,涉及为此指令使用两个具有不同配置的单独命名位置的解决方案很可能是唯一可行的选择。但是,正如我已经说过的,您无法通过指令跳转到命名位置。相反,您可以通过指令来执行此操作,如下所述:on
off
rewrite
try_files
但请记住,为了使
autoindex
指令生效,index.html
请求的 Web 服务器目录中不能有索引文件(默认情况下)。试试这个: