Rewriting https to http
Igor Sysoev
is at rambler-co.ru
Fri Jan 12 17:41:49 MSK 2007
On Fri, 12 Jan 2007, Igor Sysoev wrote:
> On Fri, 12 Jan 2007, Jonathan Dance wrote:
>
>>> "abcdefgh" < "b"
>>
>> I think you mean "alphabetical," or more specifically "in language
>> order" which is probably what you meant by "lexical."
>
> Here is quote from FreeBSD strcmp(3) man:
>
> DESCRIPTION
> The strcmp() and strncmp() functions lexicographically compare the null-
> terminated strings s1 and s2.
>
>> I can see how an alphabetical list might work, but not completely.
>> Either way, I believe the end result is the same, which is the most
>> important thing for the docs -- the longest matching string will be
>> the one which is used -- but your way is more efficient.
>>
>> I think what you're doing is searching the alphabetical list for where
>> you would find the request URI (even though the request URI is not
>> necessarily in the list). But, then you might have to backtrack up the
>> list until you find a matching path. For example, if the locations are
>> as such:
>>
>> /
>> /a
>> /z
>>
>> And the request is /n, then the initial search would return 1 -- e.g.,
>> in order to insert /n into the list, it would go after /a.
>>
>> /
>> /a <==
>> /z
>>
>> However, /a doesn't match /n so you would have to go back up the list
>> until you find /, which would match.
>>
>> Maybe you found a way around this problem though. :)
>
> I was wrong in my correction:
>
> nginx finds the longest match to conventional string.
> These strings are sorted internally in lexical order,
> - so the search is terminstaed just when URI became
> - lexically more than a string.
> + so the search is terminated just while URI is lexicographically
> + equal or more than string.
Sorry, I was wrong again.
+ so the search continues while URI is lexicographically
+ equal or more than string.
or (more preferable variant):
+ so the search is terminated just when a string will become
+ lexicographically more than URI.
> So:
>
> 1) "/n" is tested again "/", it's match, nginx stores the "/" configuration.
> The search continues, because "/n" >= "/".
> 2) then "/n" is tested again "/a", it does not match.
> The search continues, because "/n" >= "/a".
> 3) then "/n" is tested again "/z", it does not match.
> The search is stopped because "/n" < "/z".
>
> The last stored configuration (i.e. "/" is used).
Igor Sysoev
http://sysoev.ru/en/
More information about the nginx
mailing list