cyr*_*ilv 5 nginx regex proxypass
在现有 Web 应用程序的新版本上工作,我需要 nginx 转发根 (/) 和多个要转发到 v2 基础架构(使用 proxy_pass)的特定 URI,而未指定的 URI 必须转发到 v1。
location = /specific_uri1
proxy_pass http://v2.webapp.com;
proxy_set_header Host v2-test.webapp.com;
add_header X-version v2;
add_header X-node $hostname;
}
location = /specific_uri2
proxy_pass http://v2.webapp.com;
proxy_set_header Host v2-test.webapp.com;
add_header X-version v2;
add_header X-node $hostname;
}
location / {
proxy_pass http://v2.webapp.com;
proxy_set_header Host v2-test.webapp.com;
add_header X-version v2;
add_header X-node $hostname;
}
location /(.*)$ {
proxy_pass http://v1.webapp.com;
proxy_set_header Host v1-test.webapp.com;
add_header X-version v1;
add_header X-node $hostname;
}
Run Code Online (Sandbox Code Playgroud)
最后一个 location 指令永远不会匹配,因此所有未声明的内容仍然属于 v2 Web 应用程序。我肯定对 nginx 处理指令的方式有误解。
我已经测试了许多配置,但没有一个适合我的情况。
谢谢你。
更新:
我已使用以下块更新了我的配置:
location ~* /specific_uri1/ {
proxy_pass http://v2.webapp.com:8008;
proxy_set_header Host v2-test.webapp.com;
add_header X-version v2;
add_header X-node $hostname;
}
location = / {
proxy_pass http://v2.webapp.com:8008;
proxy_set_header Host v2-test.webapp.com;
add_header X-version v2;
add_header X-node $hostname;
}
location / {
proxy_set_header Host v1.webapp.com;
proxy_pass http://v1-test.webapp.com;
add_header X-version v1;
add_header X-node $hostname;
}
Run Code Online (Sandbox Code Playgroud)
所有请求的 URI 都被转发到正确的版本,但是,来自 /specific_uri1 和 /(root)的资产是从 v1(而不是 v2)获取的,导致 http 404 错误。我的资产是从 URI 加载的,/js/main.js?v=0.9.0-sprint14
所以我猜最后一个位置块与它们匹配。由于我的应用程序的两个版本都使用相同的文件夹树,因此我无法指定 /js 或 /img 位置。处理这个问题的正确方法是什么?
location /
匹配任何位置 - 如果您只想匹配/
,则应该使用location = /
. 有关详细信息,请参阅此文档。
此外,您的正则表达式位置缺少~
or~*
运算符。但是您问题中的最后一个位置块应该是location /
.
您可以使用单个正则表达式来简化配置:
location ~* ^/(|specific_uri1|specific_uri2)$ {
proxy_pass http://v2.webapp.com;
proxy_set_header Host v2-test.webapp.com;
add_header X-version v2;
add_header X-node $hostname;
}
location / {
proxy_pass http://v1.webapp.com;
proxy_set_header Host v1-test.webapp.com;
add_header X-version v1;
add_header X-node $hostname;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15141 次 |
最近记录: |