如何使用 Nginx 反向代理特定的扩展名

如何使用 Nginx 反向代理特定的扩展名

假设我尝试代理所有针对 jpg、png 和 mp3 文件的请求,如下所示:

http://example.com/some/url/file.png

http://example.net/data/some/url/file.png

请注意,这是到另一台服务器的完全相同的路径,但数据添加。

以下是我目前所拥有的:

location ~* .(jpg|png|mp3)$ {
        proxy_pass https://example.net/data/;
        proxy_redirect https://example.net/data/ /
    }

但是我一直收到错误

"proxy_pass" cannot have URI part in location given by regular expression, or inside named location, or inside "if" statement, or inside "limit_except" block

出了什么问题?我该如何正确写入这个位置块?

答案1

如果您想在正则表达式匹配位置块中将不同的 URI 传递给后端,则需要更改 URI 使用rewrite指令(命名位置也是如此):

location ~* \.(jpe?g|png|mp3)$ {
    rewrite (.*) /data$1 break;
    proxy_pass https://example.net;
    proxy_redirect https://example.net/data/ /
}

相关内容