【问题标题】:How to proxy Frontend images into Backend images?如何将前端图像代理到后端图像?
【发布时间】:2019-04-02 18:30:48
【问题描述】:

我在处理图像时遇到了一点问题。我有一个前端服务器 (site.com) 和后端服务器 (api.site.com),它们都由 NFS 存储链接以用于图像。 原始图像存储在后台服务器中。 前端服务器只有 Nginx 和 NodeJs 后台只有 Nginx 和 PHP

当我要显示图片时:site.com/img/path-to-img-s250x250.jpg,它会在NFS中搜索,如果存在则显示,如果不存在,则获取原始图片,调整大小并通过以下方式保存在NFS中我们在 API 服务器中的 PHP 脚本。

你推荐给我的重写规则,只有在我想通过 API (api.site.com/img/path-to-img-s250x250.jpg) 显示图像时才有效,但我需要通过 Front (site.com/img/path-to-img-s250x250.jpg) 显示图像,你知道吗我怎样才能做到这一点?

# site.com/img/prods/10002/filename-w200h200-bgF00.12345.jpg
location ~ "^/img/(.*)/([a-z0-9-]+)-w([0-9]+)h([0-9]+)(-bg([0-9A-Fa-f]{3,6}))?\.[0-9]{5}\.(jpg|jpeg|png|gif|ico|webp)$" {
    try_files $uri /img/$1/$2-w$3h$4$5.$7 @redirect;
}

location @redirect {
    proxy_pass http://api.site.com;
    proxy_set_header X-ORIGIN http://api.site.com;
    proxy_set_header X-Requested-With XMLHttpRequest;
}

【问题讨论】:

    标签: php nginx url-rewriting


    【解决方案1】:

    参考您之前的问题 (How can I check if file exists in nginx? otherwise run a rewrite rule),您需要将最终重定向设为外部而非内部。

    您可以通过将命名location 指定为try_files 语句的最后一个参数来实现外部重定向。

    例如:

    location ~ "^/img/(.*/[a-z0-9]+-[0-9]+x[0-9]+)\.[0-9]{5}\.(jpg|jpeg|png|gif|ico)$" {
        try_files $uri /img/$1.$2 @resize;
    }
    location @resize {
        rewrite "^/img/(.*)/([a-z0-9]+)-([0-9]+)x([0-9]+)\.[0-9]{5}\.(jpg|jpeg|png|gif|ico)$" https://api.example.com/image?path=$1&file=$2&ext=$5&w=$3&h=$4 redirect;
    }
    

    【讨论】:

    • 再次感谢您的回复 :) 您的解决方案几乎可以正常工作,除了它使用查询字符串重定向到 api.example URL... :( 我已经更新了我的初始帖子我发布问题后发现的脚本,它实际上保持文件名完整,但只是重定向主机......你有什么问题吗?
    • break 后缀不适用于外部重定向。对于 302 响应,您应该使用 redirect,对于 301,您应该使用 permanent。您可能应该使用 redirect
    • 如果我使用redirect,图像的状态代码是 302,我不确定这对 SEO 是否是一个好主意,并且 Location is Response Headers 显示 api.site.com... 链接!有什么方法可以让它尽可能透明?
    • 您正在更新缓存,对吗?所以你不想要永久重定向。您可以改用proxy_pass 来掩盖整个过程。但我不明白您为什么需要将其拆分到两个单独的服务器上。
    • 是的,当然,我总是清除缓存以进行测试。我需要将其拆分为 2 个单独的服务器,因为原始图像保存在公共无法访问的后端服务器 (API) 中,而公共图像存储在前端服务器中。调整大小和保存过程只能通过 API 完成。你推荐一个更好的方法来做到这一点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2021-07-08
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    相关资源
    最近更新 更多