【问题标题】:64 bit integer comparison in HAProxy acl ruleHAProxy acl 规则中的 64 位整数比较
【发布时间】:2017-04-15 12:23:23
【问题描述】:

我有以下 acl 规则来检查我的 url_param 值的范围。

acl small       urlp_val(uid) le 311111111111000000
acl medium       urlp_val(uid) 311111111111000001:311111111111001000
acl large       urlp_val(uid) ge 311111111111001001

数字是 64 位整数。这种比较似乎不起作用。它总是只重定向到一个实例。如果我将数字减少到 1 到 100 的范围内,效果很好。它不支持 64 位数字还是我在这里做一些愚蠢/愚蠢的事情?

【问题讨论】:

    标签: apache load-balancing haproxy


    【解决方案1】:

    documentation 总是用“int”和“integer”来表示这种类型。如果您查看源代码,您会看到smp_fetch_url_param_val 使用strl2ic,它返回一个int,而不是long

    所以不,您不能使用 urlp_val 提取 64 位值。

    【讨论】:

      【解决方案2】:

      我有类似的任务。我通过从大量数字中删除最后 6 个字符并仅比较第一部分来解决它。

      # my case: if some_id >= 9089000000 use backend_2
      
      acl is_number_long urlp_reg('some_id') '^\d{7,}$'
      acl is_first_part_great urlp('some_id'),regsub('\d{6}$','') -m int gt 9088
      
      use_backend backend_2 if is_number_long is_first_part_great
      
      default_backend backend_1
      

      你可以试试这样的:

      # some_id = 311111111111000000 -> first_part = 311111111, last_part = 111000000
      
      acl is_number_long urlp_reg('some_id') '^\d{10,}$'
      
      acl is_first_part_gt urlp('some_id'),regsub('\d{9}$','') -m int gt 311111111
      acl is_first_part_eq urlp('some_id'),regsub('\d{9}$','') -m int eq 311111111
      
      acl is_last_part_gt urlp('some_id'),regsub('^.*(\d{9})$','\1') -m int gt 111000000
      acl is_last_part_lt urlp('some_id'),regsub('^.*(\d{9})$','\1') -m int lt 111001001
      
      use_backend backend_3 if is_number_long is_first_part_gt                                  # large
      use_backend backend_3 if is_number_long is_first_part_eq !is_last_part_lt                 # large
      
      use_backend backend_2 if is_number_long is_first_part_eq is_last_part_gt is_last_part_lt  # medium
      
      default_backend backend_1                                                                 # small
      

      【讨论】:

        猜你喜欢
        • 2017-09-24
        • 2018-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-05
        • 2022-01-11
        • 2012-07-29
        • 2012-04-24
        相关资源
        最近更新 更多