为什么 proxy_pass 在 Nginx 中不处理子 uris?

Why isn't proxy_pass in Nginx handling sub uris?

我正在尝试将我的 Web 应用程序中的子路径代理到资产服务器(以避免跨域问题)。

我已将此配置添加到 nginx.conf 中的服务器上下文中。

location /assets2/ {
    proxy_pass http://itype-assets/videos/transparent/classroom.png;
}

location /assets/ {
    proxy_pass http://itype-assets/;
}

添加此配置后我发现:

http://localhost:8080/assets2/ - 提供预期的图像

http://localhost:8080/assets/videos/transparent/classroom.png - returns 404

我在这里错过了什么?

编辑:

经过进一步调查,我发现删除后续规则可以解决问题:

    location ~ ^.+\..+$ {
        try_files $uri =404;
    }

但是,我需要该规则来为我的静态文件提供服务。更改规则声明的顺序不会改变行为。

所以我的问题变成了,如何将 proxy_pass 规则与 try_files 规则一起使用?

事实证明,nginx 将始终通过前缀位置匹配来解析正则表达式位置匹配。

可以通过将我的位置声明修改为以下内容来覆盖此行为:

location ^~ /assets/ {
    proxy_pass http://itype-assets/;
}