使用 NGINX 作为对象存储网关

大神,打扰一下,使用 NGINX 作为对象存储网关
最新回答
素年凉音°

2024-09-14 01:41:07

原文作者:Elijah Zupancic of F5

您是否曾经不小心发错了链接,它不是链接到您的 CDN 中的文件,而是链接到了像是 Amazon S3 这样的对象存储中的文件,而且这个链接还被大量传播使用?您是否被随之而来的飙升的云服务成本吓了一跳,或者您的云提供商甚至切断了链接?如果答案是“是”,那么本文正适合您。本文将介绍如何将 NGINX 作为缓存网关前置于 S3 私有 存储桶,从而在您的私有存储桶和公共互联网之间建立一层保护。这种做法有两个优点:NGINX 会缓存对您的对象存储的请求,同时还能防止对象存储中的内容暴露给公网。

虽然 Amazon S3 是亚马逊云科技(AWS)的专有产品,但在事实层面,它已然成为 对象存储系统的标准接口,许多厂商都提供了与之兼容的存储产品,例如 Backblaze、Digital Ocean、Google Storage、Minio、NetApp、Nutanix、Tencent Cloud、VMware 和 Wasabi 等。尽管 S3 API 被大范围支持,但 S3 API 的具体实现通常不太适合非存储操作,比如不适合支持大量的公共互联网流量。于是人们就产生了这样一个共同的需求:在 S3 API 的前面加设一层,以将存储接口桥接到另一个应用或特定用户接口。NGINX 可以充当此桥梁,并通过它的模块生态系统和可配置性创造额外的价值。

本文将通过探索一个托管在 GitHub 上 功能完整的 Docker 实现(我们也提供了一个独立的 Ubuntu 安装实例),展示如何将 NGINX 开源版和 NGINX Plus 配置为一个与 S3 兼容的对象存储的只读网关。虽然本文只介绍如何将 NGINX 设置为与 S3 兼容的服务的网关,但您可以将这种方法延伸应用到任何 AWS API 请求的签署。

您可能会纳闷,“我的对象存储已经在大规模为文件提供服务了,何必在前面又多加一层呢?

答案很简单:S3 等对象存储只擅长一件事情 —— 存储和检索对象。而 NGINX 是一个高度可配置的反向代理,能够在作为基础对象存储网关的前提下提供更多功能。因此,它可以很好地支持多种用例,其中包括以下这些典型用例。

高速缓存安全控制、访问内部应用、压缩和内容优化、安全性、应用网关等特性,NGINX 可以帮助对象存储更好地服务于多种场景。

NGINX 允许您在 S3 API 前面构建另一个安全层,从而可以对发出过多下载请求的用户进行 速率限制、限制 存储桶内可以访问的对象路径等。您还可以使用 F5 NGINX App Protect WAF 或 NGINX ModSecurity WAF 等集成式 Web 应用防火墙 (WAF) 保护 S3 API。

从站点提供内容时,对所有资源使用同一域名来满足安全、品牌、一致性和可移植性的要求十分常见。因此,从同一主机同时提供静态和动态内容也是常有的需求。当被用作 S3 API 网关时,NGINX 不仅可以从对象存储中提供静态文件,而且还可以针对来自应用服务器的动态内容请求提供代理和负载均衡功能。

在 Docker 中配置和运行 NGINX 网关,您可以选择 NGINX 开源版或 NGINX Plus,具体依赖于您的实际需求。NGINX Plus 提供额外的高级功能,例如更高级的安全性和监控功能。

更多资源

想要更及时全面地获取NGINX相关的技术干货、互动问答、系列课程、活动资源?

请前往NGINX开源社区: