nginx使用if实现多重判断case一例
场景
- 根据请求URI的某个参数,判断后分发到不同backend。具体来说会判断是否存在code=OVERSEA…,有则upstream到指定backend
- 根据来源IP区分production环境和preview环境
问题
- 上面提到的参数可能重复出现
- if不支持复杂的逻辑运算
- if is evil
nginx根据后端返回状态进行upstream
需求
某系统,需在国外建立完全独立的一套业务。且国内已有用户还需继续维护。
由于带宽、响应时间等原因,通过db主从的方式全球同步数据存在一系列问题。
问题
- 放在前端的nginx不能判断用户归属国家,判断逻辑太重,nginx不适合做这个
- nginx后端的backend有自己的逻辑判断用户归属,用返回的status code来标识
解决方案
- nginx + lua + subrequest
- 要在content阶段完成
- 需在rewrite阶段做一点处理
- GET和POST要区分对待
- POST的body和GET的args、cookie等处理
- nginx根据后端的不同返回status code,进行逻辑判断,是直接返回给client还是重新proxy到其他国家
ansible安装JDK
JDK这东西,简单来说就是一个包,主要生效的还是环境变量。
直接上实现
目录结构
|
|
简单的一个说明而已,没有必要搞什么最佳实践了。^_^
开篇流水
始
其实一、两年前就打算搞个blog,但一直忙懒,所以断断续续的,最后也没完成。
但愿这个能坚持下去!