nginx proxy_pass + map配置问题

新手上路,请多包涵

我希望对refer不同的请求分配不同的server。
refer是a.com/a/0/1的转到demo服务器,其他的转到生产服务器,因此写了如下nginx配置。

map $http_referer $be_pool {                                                                                                                                                                                                                                                                                                                                       
    default                  be;                                                                                                                                                                                                                                                                                                                                   
    "~a\.com\/.*\/0\/.*"       be_demo;                                                                                                                                                                                                                                                                                                                
} 
server {
    ...
    location ~ ^/capi/(.*)$ {                                                                                                                                                                                                                                                                                                                                               
        proxy_pass http://$be_pool/$1;                                                                                                                                                                                                                                                                                                                             
    } 
}

但是当我发送请求到domain.com/capi/a/b的时候如果不带“a.com/a/0/1”的Refer那么server be可以收到正常的请求“be/a/b",但是带上“a.com/a/0/1"的Refer之后server bemo收到的请求却是"be_mode/",path丢失了。
请各位大神指教应该如何处理?

阅读 2.7k
1 个回答
✓ 已被采纳新手上路,请多包涵

搞定了
nginx对未命名的正则变量只会匹配一次,所以map里的第二项就没有$1了,需要给正则变量命名,形如
location ~ ^/capi/(?<myuri>.*)$ {
就好了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题