我有类似的任务。我通过从大量数字中删除最后 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