为什么 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/;
}
我正在尝试将我的 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/;
}