Question about allowing a percentage of traffic

This is about traffic control, in the case we get slammed by heavier
traffic than expected we want to be able to gracefully only allow part
of the users’ requests to come through.

In my current nginx config, I have a white list based on a
$http_x_user_id header in the request and only allow traffic from those
users.

The way I did it was a condition in the location / block:

if ( $http_x_user_id !~ (THE_WHITE_LIST_OF_IDs) ) {
return 503;
}

(We can control the white list dynamically and re-render the config with
Chef.)

What I also need to do is to allow a certain percentage of requests from
users whose id is not in the white list. For example, I need to be able
to allow 30% of users in addition to those in the white list to get
access. Based on my limited knowledge on nginx, I have no idea on what’s
the best way to do it.

Any insights?

Thanks a lot.

Posted at Nginx Forum:

On Wednesday 21 March 2012 22:44:26 spacerobot wrote:

if ( $http_x_user_id !~ (THE_WHITE_LIST_OF_IDs) ) {
the best way to do it.

Any insights?

Perhaps the split clients module will be suitable for you:

http://nginx.org/en/docs/http/ngx_http_split_clients_module.html

wbr, Valentin V. Bartenev

What I also need to do is to allow a certain percentage of requests from
users whose id is not in the white list. For example, I need to be able
to allow 30% of users in addition to those in the white list to get
access. Based on my limited knowledge on nginx, I have no idea on what’s
the best way to do it.

Any insights?

Embedded perl can help.

Thanks guys, the split_clients module worked.

Posted at Nginx Forum: