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这东西,简单来说就是一个包,主要生效的还是环境变量。
直接上实现

目录结构

1
2
3
4
5
$ tree
.
├── files
│   └── jdk1.6-centos6.tar.gz
└── main.yaml

简单的一个说明而已,没有必要搞什么最佳实践了。^_^

开篇流水

其实一、两年前就打算搞个blog,但一直懒,所以断断续续的,最后也没完成。
但愿这个能坚持下去!