Hello!

On Fri, Oct 01, 2021 at 10:47:01AM +0200, Markus Grobelin wrote:

> Hy everybody, 
> 
> I have a reverse-proxy setup with an upstream application that 
> sets a header (x_tenant_id). 
> 
> Based on that headers value, I want to apply a rate limit to 
> clients. 
> 
> I verified the rate limit applies* properly, when a usual 
> request header (e.g. $http_x_tenant_id) is mapped. However the 
> config below does not map $upstream_http_x_tenant_id** at all. 
> 
> Any advice how to achieve rate limiting using such 
> $upstream_http_ headers? 

Request rate limiting, as configured with the limit_req rate 
directive (not to be confused with response transmission rate 
limiting, limit_rate), happens before processing a request, that 
is, before the request is sent to the upstream server and a 
response is received.  As such, you cannot rely on variables only 
available when a response is received from the upstream server, 
such as $upstream_http_* variables.

If you want to reject requests based on the information only 
available on the upstream server, the best solution might be to 
actually reject requests on the upstream server.  If you have to 
do it on nginx for some reason, it should be possible to configure 
things using X-Accel-Redirect redirections, though this going to 
be a complex configuration, and it will do two upstream request 
instead of just one.  A better approach might be to re-think your 
limiting configuration to use something directly available from 
the request.

-- 
Maxim Dounin
http://mdounin.ru/
_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx

Reply via email to