doc: limit_except

Igor Sysoev is at rambler-co.ru
Fri Mar 16 18:10:44 MSK 2007


On Fri, Mar 16, 2007 at 09:38:01AM -0500, Gregg Reynolds wrote:

> On 3/16/07, Igor Sysoev <is at rambler-co.ru> wrote:
> 
> >
> >The "!=" is good for me, thank you. I think the "==" should be omitted:
> >
> >     methods     POST ...
> >     methods     LOCK UNLOCK ...
> >     methods !=  GET ...
> 
> Ok by me.  Another option occurred to me, which might be clearer and
> is certainly more powerful: use set operators.  Also, isn't the method
> available in a variable?  So, e.g.
> 
>    $method memberof {POST...} { ... }
>    $method not memberof {GET} {...}
> 
> Of course you could pick a different keyword (eltof, etc).  I would
> avoid "in" to avoid a collision with the sense of "inwardly directed".
> You could do something like %member, too.
> 
> The nice thing about this is that it removes a directive and relies
> only on syntax.  The directive name doesn't actually do any work,
> after all. And with a set membership test you have a more general
> capability.  Then it's just a predicate test, and you can support any
> predicate you like:
> 
>   $UA memberof {IE SAFARI...} {...}
> 
> The semantics can be inferred directly from the syntax: no need for a 
> directive.
> 
> Actually, now that I think about it, there is a good reason not to
> omit the operator (whether if be equality or membership).  Something
> like
> 
>    methods     LOCK UNLOCK ...
> 
> can easily be misread to mean "here is a list of methods against which
> to test the request method."  But that would imply that
> 
>    methods != LOCK UNLOCK...
> 
> must mean "here's a list of methods _not_ to test the request method
> against".  Logically this cannot imply that "methods" is everything
> else.  The test is in fact a set membership test on the (one) request
> method against the method-list args.  At least it looks that way to
> me.  So both omission of an operator and use of the plural would be
> misleading.
> 
> In any case, this will be an improvement on limit_except.  Now I can
> write the documentation. ;)

Actually you can test methods right now using:

    if ($request_method = POST) {
        ...
    }

or

    if ($http_user_agent ~ "MSIE|Safari") {
        ...
    }

but "if" has some overhead. The "limit_except" was introduced to have
zero overhead. It is important in situation, when GET requests are much more
frequent than PUT/etc methods.


-- 
Igor Sysoev
http://sysoev.ru/en/





More information about the nginx mailing list