NGINX:在所有目录中仅提供特定文件类型的服务

11

我需要在虚拟服务器上仅仅提供.vmdk和.vmx文件,无论在哪个目录级别下。这是我的当前配置(目前它服务于所有内容,但如果我取消注释底部的部分,它就不会提供任何内容):

server {
    listen  80;
    server_name vmdk;

    access_log  /var/log/nginx/localhost.access.log;
    root /srv/vmdk/public;

    location ~ (./?|\vmdk|\vmx)$ {
            autoindex on;
    }


    #location / {
    #       deny all;
    #}

}

我该如何实现这个目标?

如果使用Apache更容易实现,那么请提供一个示例Apache配置。


你的正则表达式很奇怪。 - Alexey Ten
@AlexeyTen 这可能是错误的。 - user2787959
1个回答

16

这应该可以工作

server {
    listen   80;
    server_name  vmdk;

    access_log  /var/log/nginx/localhost.access.log;
    root /srv/vmdk/public;

    location / {
        deny all;                     # deny by default

        location ~ "\.(vmdk|vmx)$" {
            allow all;                # allow vm disk images, etc.
        }

        location ~ "/$" {
            allow all;
            autoindex on;             # allow listing directory contents
        }
    }
}

1
我使用这个配置出现了403禁止访问的错误。 - user2787959
如果我在“/”中添加一个“test.vmdk”,我可以打开“/test.vmdk”,但我无法在任何地方看到目录列表,这是我需要的。 - user2787959
"error.log" 显示:*1 访问被规则禁止,... - user2787959
@teelf,Alexey提供的答案回答了你最初提出的问题。列出目录内容的问题是另一个问题。为了实现这一点,您可以尝试使用“autoindex on;”指令。请注意,“deny all;”可能会与“autoindex”发生冲突。 - Kevin A. Naudé
@teelf,我在Alexey的好回答中加入了您要求的细节。 - Kevin A. Naudé
如果我想要一个索引文件,而不必显式地输入“/index.html”怎么办?实际上,我们想要拒绝所有,但是它也阻止了索引文件的调用。 - blkpingu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接