重写

场景说明

  • 假设我们的服务升级后,服务路径发生了变化(/service => /v1/service)
  • 同时我们有一些已经发布出去的APP,如果修改请求路径,需要用户下载安装新版本
  • 我们希望老版本的APP也可以直接请求新的服务,而不用同时维护两套服务

配置说明

在样例配置(conf/)上添加一些新的配置,就可以实现上述功能

  • Step 1. bfe启用mod_rewrite模块(conf/bfe.conf)
  1. Modules = mod_rewrite #启用mod_rewrite
  • Step 2. 配置rewrite规则文件的存储路径 (conf/mod_rewrite/mod_rewrite.conf)
  1. [Basic]
  2. DataPath = mod_rewrite/rewrite.data
  • Step 3. 配置rewrite规则

路径前缀为/service的所有请求均会添加/v1前缀后转发给后端服务

  1. {
  2. "Version": "init version",
  3. "Config": {
  4. "example_product": [{
  5. "Cond": "req_path_prefix_in(\"/service\", false)",
  6. "Actions": [{
  7. "Cmd": "PATH_PREFIX_ADD",
  8. "Params": [
  9. "/v1/"
  10. ]
  11. }],
  12. "Last": true
  13. }]
  14. }
  15. }
  • Step 4. 验证配置规则
  1. curl -H "host: example.org" "http://127.1:8080/service"

对应后端服务集群cluster_demo_dynamic收到的请求PATH为”v1/service”