1
eason1874 2021-11-25 15:44:18 +08:00
静态文件链接不带 userId 参数吧,按你的代码,链接没有 userId 判断不了是否灰度
但是判断不了也应该回源 production_server 啊,怎么会是代理机器呢,你确定没搞错? |
2
laev OP @eason1874 确实是我搞错了,最终回源到的是 production_server 。我有点疑问的是当$default_stream 为 production_server 也就是默认值的时候,静态文件是可访问的,似乎 nginx 自动处理了$args ,同时 $default_stream 替换为 grayscale_server 也是可以访问的。我尝试在配置文件中写入
access_by_lua_block { ngx.var.default_stream = ngx.var.grayscale_stream } 这样也能成功读取到,目前似乎是在引用 lua 脚本运行赋值时没有获得 userId 从而导致资源被指向 production_server |
3
eason1874 2021-11-26 14:11:09 +08:00
@laev 你的代码根据网址参数 userId 判断是否灰度,静态文件链接没有这个参数啊
比如你允许 userId 为 1 的灰度, 当请求 //localhost/?userId=1 时会匹配到灰度,但是网页里面的资源比如 /js/a.js 不会匹配到灰度,因为不是 /js/a.js?userId=1 ,缺少必要参数 解决办法就是换别的方式传参。比如用 Cookies ,但是 Cookies 动态判断的缺点很多,客户端禁用 Cookies 的时候不管用,要在 CDN 缓存静态资源时不管用,等等 所以不同版本的静态资源路径通常是写死的,部署自动在路径加上文件版本号,比如 /js/a-{filehash}.js ,新版本引用新的文件就不会读取到旧文件 前端服务在静态文件路径同时反代生产和灰度环境,proxy_next_upstream http_404 ,生产 404 就读灰度,然后把结果缓存并返回 |