我可以使用NGINX提供静态机密(验证文件,如驾驶执照)图像吗?

时间:2017-09-09 14:51:09

标签: java nginx spring-boot

我刚开始学习NGINX。但我怀疑NGINX是否会按照我的要求服务。

问题: 在我的网络应用程序中,我正在服务器文件系统上传用户的文档,例如在/ opt / myproject / images目录中。

我需要一种方法来使用NGINX提供用户的文档(像驾驶执照一样保密),但我还需要一种方法来检查该用户是否有权获取此资源。

这是我的要求。 NGINX可以满足我的要求吗?

注意:我的应用服务器是tomcat(在spring boot中构建,我的应用程序以jar文件的形式运行)

还是有更好的方法吗?

注意:我不想在我的应用服务器上加载太多,这就是我使用NGINX的原因

1 个答案:

答案 0 :(得分:0)

是的,你可以这样做。您需要做的是使用X-Accel标头。因此,您将在nginx配置中定义一个块

location /confidential_images {
   root /opt/myproject/images;
   internal;
}

标记API内部意味着只有nginx才能调用此块。现在,您的代码将获得有关用户应该看到的图像的信息。因此,您将在代码中创建一个用户可以访问的端点,您可以在其中查看可以访问的图像。然后,您可以从代码中返回X-Accel-Redirect标题

在您的代码中,您将在标题

下面返回
X-AccelRedirect: /confidential_images/<path inside images folder>;

然后,Nginx会将其内部重定向到我们定义的内部位置,该图像将是服务器。关键是不要让nginx直接提供图像,而是使用使用应用程序代码控制的内部位置。

详细了解https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/