我有以下 nginx 代码,我希望 json 文件通过两个位置。有了以下代码,json 文件仅通过第二个位置传递。为了使两个位置都“启用”json,需要什么。我想确保第一个位置包含 /new URI(+ 几个其他子 URI)。
location /new/ {
proxy_http_version 1.1;
proxy_pass http://new_upstream;
}
location ~* \.(?:jpg|jpeg|json|fs)$ {
proxy_pass http://upstream;
}
答案1
正如nginx 位置文档,nginx 首先匹配完全匹配(= /path
),然后匹配前缀匹配(/path
),并记住最佳匹配。
然后它继续检查正则表达式匹配,如果发现则使用它。
如果想要阻止正则表达式匹配location
,则需要^~
在中使用说明符location
:
location ^~ /new/ {
proxy_http_version 1.1;
proxy_pass http://new_upstream;
}
location ~* \.(?:jpg|jpeg|json|fs)$ {
proxy_pass http://upstream;
}
但是,此配置会强制所有带前缀的请求/new
都由该块处理。第二个块不会为任何 JPG / JPEG / JSON / FS 扩展提供处理/new
。