incubator-couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jeremy Wall" <jw...@google.com>
Subject Re: URL-decoding reverse proxy breaks remote replication
Date Wed, 03 Sep 2008 22:44:23 GMT
Unfortunately the server is only running 2.2.3 and I can't upgrade it so I
guess I'm stuck. :-(

On Wed, Sep 3, 2008 at 3:03 PM, Adam Kocoloski <adam.kocoloski@gmail.com>wrote:

> Hi Jeremy, I think Apache added a "nocanon" keyword in 2.2.7+ that's
> supposed to pass raw URLs onto the backend.  Have you tried that?  Best,
>
> Adam
>
>
> On Sep 3, 2008, at 3:26 PM, Jeremy Wall wrote:
>
>  An Apache reverse proxy also breaks with url encodings. So that's at least
>> one other proxy that does it.
>>
>> On Wed, Sep 3, 2008 at 2:13 PM, Damien Katz <damien@apache.org> wrote:
>>
>>  This is an issue I've been anticipating for a while, which is proxies
>>> messing around with the url encoding and causing problems.
>>>
>>> CouchDB url elements are delimited by slashes, for example "GET
>>> db/doc/fileattachment". But any of the elements "db" "doc" or
>>> "attachment"
>>> could have slashes in them,  if slashes are url encoded (%20 I think).
>>>  So
>>> using the slashes requires that the proxies keep the encoding exactly
>>> intact, instead of normalizing encoded urls to slashes.
>>>
>>> I've discussed this a while ago and was advised that proxies shouldn't
>>> mess
>>> with the URL encodings. So too me, my default position is this to me is a
>>> bug in nginx. However, I can be convinced otherwise, if other proxies or
>>> tools tend to do the same thing.
>>>
>>> -Damien
>>>
>>>
>>> On Sep 3, 2008, at 2:38 PM, Adam Kocoloski wrote:
>>>
>>> Hi, I installed CouchDB behind nginx the other day and noticed that
>>> remote
>>>
>>>> replication didn't work.  The problem seems to be that
>>>>
>>>> a) CouchDB stores the replication history in a local doc with an ID
>>>> formed
>>>> from the URL-encoded paths to the source and target DBs,
>>>>
>>>> b) nginx decodes all %2Fs in the URLs it processes, and
>>>>
>>>> c) couch_httpd chokes on a GET request for the replication history doc
>>>> using the decoded URL delivered by nginx.
>>>>
>>>> My workaround was to encode "/" as "|" in the ID of the replication
>>>> history document.  It seemed simpler than doing extra special-casing in
>>>> couch_httpd to handle decoded "/" characters in replication docIDs, and
>>>> I
>>>> didn't see any way to turn off URL decoding in nginx.  Best,
>>>>
>>>> Adam
>>>>
>>>> --- a/trunk/src/couchdb/couch_rep.erl
>>>> +++ b/trunk/src/couchdb/couch_rep.erl
>>>> @@ -28,6 +28,9 @@ url_encode([H|T]) ->
>>>>      [H|url_encode(T)];
>>>>  H == $_; H == $.; H == $-; H == $: ->
>>>>      [H|url_encode(T)];
>>>> +    % nginx will decode the %2F which makes couch_httpd blow up
>>>> +    H == $/ ->
>>>> +        [$||url_encode(T)];
>>>>  true ->
>>>>      case lists:flatten(io_lib:format("~.16.0B", [H])) of
>>>>      [X, Y] ->
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message