Use the slice command in nginx and $slice_range your cache key ;)
I'm not asking for advice I'm stating it does technically complicate your setup. What if two people request overlapping ranges concurrently etc... it is more moving parts to setup, test and administer