我们的网站是一个图像存储库。每个图像都有一个外部 URL 和一个内部 URL 的概念。客户可以看到外部 URL,并且在我们尝试 SEO 时它们会发生变化。内部 URL 是指向我们的图像托管服务的永久 URL。我们使用我们的 Ruby on Rails 应用程序来提供 URL 翻译。下面是一个请求示例:
-------- ----- ------- ------- ------------
| | --eURL--> | | --> | | --> | | -iURL--> | |
|client| |CDN| |Nginx| | RoR | |Image Host|
| | <-------- | | <-- | | <-- | | <-IMG--- | |
-------- ----- ------- ------- ------------
该架构正在运行,但通过 RoR 流式传输图像效率低下。我想让 Nginx 做代理。这就是它的用途。提议的架构看起来像这样:
-------- ----- ------- -------
| | --eURL--> | | --> | | ------> | RoR |
|client| |CDN| |Nginx| <-????- | |
| | <-------- | | <-- | | -------
-------- ----- | | ------------
| | -iURL-> |Image Host|
| | <-IMG-- | |
------- ------------
我可以向 Nginx 发送什么响应以使其代理数据?我不介意将 Nginx 模块添加到我的基础架构中,当然我愿意更改我的 nginx.conf。
X-Sendfile是我发现的最接近的东西,但它只允许从本地文件系统流式传输。也许还有其他一些我不知道的模糊 HTTP 响应标头或状态代码。