Nginx 限制文件访问

4
目前我的配置文件(/etc/nginx/sites-available/default)如下:
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location /credentials.js {
                deny all;
                return 404;
        }

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }

}

但我仍然可以通过example.com/credentials.js从Web访问credentials.js。有什么建议吗?

我已经更新了我的问题,并回答了你的问题。 - Samast Varma
你能把整个/credential.js块移动到location /里面再试一次吗? - Tarun Lalwani
那没修好。结果一样。 - Samast Varma
运行 nginx -T 命令并将输出提供给您的问题。 - Tarun Lalwani
那个命令刚刚输出了我为服务器保存的配置,其中之一就是我上面发布的那个。你想让我对此进行特定的操作吗? - Samast Varma
显示剩余3条评论
1个回答

10
尝试在位置中添加=,这将会进行精确匹配:
server {
    server_name _;
    listen 80 default_server;

    location = /credentials.js {
        deny all;
        return 404;
    }

    location / {
        add_header Content-Type text/plain;
        return 200 "hello world\n\n";
    }
}

Nginx位置文档:

如果找到完全匹配,则搜索停止。例如,如果“/”请求经常发生,则定义“location = /”将加速处理这些请求,因为搜索在第一次比较后立即终止。此类位置显然不能包含嵌套位置。


@SamastVarma,请尝试答案中的小例子,它应该可以工作,如果需要,只需更改服务器名称/端口。 - nbari
“仍然无法工作”,您是否在更改后忘记重新加载nginx配置? location = /credentials.jslocation ~* credentials.js应该拒绝访问该文件。 - hcheung
我昨晚更新了我的代码,加上了=并重新加载,但仍然可以从网页访问该文件。今天早上我再试一次,现在已经正确返回404了。谢谢! - Samast Varma
它可以工作。你需要清除浏览器缓存。否则,你仍然可以下载那个文件,而别人也能够访问它。 - heinels

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