Indeed in some cases, simple space or '-' works in attachment name, but '+'
in attachment name surround with space ' + ' always result in missing
attachement with ou without buffering. I also noticed some URI escape
replace space by + and not %20 but I cannot guess which one clients will
use (browser, Android, iOS, .NET etc). As long as CouchDB can have ' + ' in
attachment name I have to correctly configure my reverse proxy to allow
it...

Max

2018-03-12 13:22 GMT+01:00 Renato <ren...@sinitean.org>:

> Hi Max,
>
> I use couch (2.1) in a sub dir via nginx as a proxy with the suggested
> conf you mentioned in your first email. The only difference is that I turn
> off buffering at the same level instead of filtering for “_changes” (I may
> change that). I have attachments with “-“ , “_” and “ “ just not with “+”.
> I tried adding a doc with a “+” and uploaded it via Fauxton. The “+“ in
> the name is converted to a space (“ “) in the attachment listing of the
> respective couch doc. If I try to retrieve the attachment directly, I can
> either use a “%20” where the space is or also “+”. So it seems that the “+”
> is reserved as a substitute for a space character and works but maybe not
> as expected. The other chars should work as expected.
>
> This is what works for me:
>
>   location /couchdb {
>      rewrite /couchdb/(.*) /$1 break;
>      proxy_pass http://localhost:5984;
>      proxy_redirect off;
>      proxy_buffering off;
>      proxy_set_header Host $host;
>      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
>  }
>
> Renato
>
> > On Mar 12, 2018, at 12:02 PM, max <maxima...@gmail.com> wrote:
> >
> > Thanks for your answers.
> > @Jan
> > I already tried this and it cannot be used since the sub directory part
> > remains in the URI. To be able to use it without the trailing '/' I would
> > need to tell CouchDB to listen on "127.0.0.1:5984/couchdb" and (I
> think) I
> > cannot.
> > You are right "this is more an nginx than a CouchDB question" but CouchDB
> > 2.0 doc contains this "Reverse proxy for a sub directory" part that seems
> > not correct, that's why I was hopping help from CouchDB users :).
> >
> > @Sinan
> > You are completely right but only with '/' and actually this was exactly
> my
> > configuration when I did not need sub directories but now I do.
> >
> > 2018-03-12 11:34 GMT+01:00 Sinan Gabel <sinan.ga...@gmail.com>:
> >
> >> Hi Max,
> >>
> >> Sorry for not being able to answer your actual question, I still want to
> >> draw your attention to the need for further nginx location needs (i.e.
> >> _changes): Here's an example of a working configuration when listening
> at
> >> the root / and using ssl.
> >>
> >>    location ~ ^/(.*)/_changes {
> >>        proxy_pass http://couchdb_node;
> >>
> >>        proxy_redirect off;
> >>
> >>        proxy_buffering off;
> >>        proxy_set_header Host $host;
> >>        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
> >>        proxy_set_header X-Forwarded-Ssl on;
> >>    }
> >>
> >>    location / {
> >>        proxy_pass http://couchdb_node;
> >>
> >>        proxy_redirect off;
> >>        proxy_set_header Host $host;
> >>        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
> >>        proxy_set_header X-Forwarded-Ssl on;
> >>    }
> >>
> >> On 12 March 2018 at 11:08, Jan Lehnardt <j...@apache.org> wrote:
> >>
> >>> Hi Max,
> >>>
> >>> this is more an nginx than a CouchDB question, but
> >>> https://serverfault.com/questions/459369/disabling-
> >>> url-decoding-in-nginx-proxy#463932 suggests that if you use proxy_pass
> >>> without a uri (not even a slash), that things should work.
> >>>
> >>> Can you verify you’re using `proxy_pass http://localhost:5984;` and
> not
> >>> e.g. `proxy_pass http://localhost:5984/;`. If you are, you should
> open a
> >>> ticket with the nginx team.
> >>>
> >>> Best
> >>> Jan
> >>> --
> >>>
> >>>
> >>>
> >>>> On 12. Mar 2018, at 10:20, max <maxima...@gmail.com> wrote:
> >>>>
> >>>> Hi,
> >>>>
> >>>> To make CouchDB listen as sub directory, doc says (
> >>>> https://cwiki.apache.org/confluence/display/COUCHDB/Nginx+as+a+proxy)
> >> to
> >>>> use:
> >>>> location /couchdb {
> >>>>   rewrite /couchdb/(.*) /$1 break;
> >>>>   proxy_pass http://localhost:5984;
> >>>>   proxy_redirect off;
> >>>>   proxy_set_header Host $host;
> >>>>   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
> >>>> }
> >>>>
> >>>> But this cannot be used for attachment with special character such as
> >> +,
> >>>> -,  ,
> >>>> For those CouchDB will send back: "{"error":"not_found","reason"
> >>> :"Document
> >>>> is missing attachment"}"
> >>>>
> >>>> The only way I found to fix it is:
> >>>> location /couchdb/ {
> >>>>       rewrite ^ $request_uri;
> >>>>       rewrite ^/ couchdb /(.*) $1 break;
> >>>>       return 400;
> >>>>       proxy_pass http://127.0.0.1:5984/$uri;
> >>>> }
> >>>>
> >>>> But doing so I cannot access CouchDB root (http://127.0.0.1/couchdb)
> >>> since
> >>>> it will result in Nginx 500 error (zero length URI).
> >>>>
> >>>> Do you know a better Nginx configuration?
> >>>>
> >>>> Thanks,
> >>>>
> >>>> Max
> >>>
> >>> --
> >>> Professional Support for Apache CouchDB:
> >>> https://neighbourhood.ie/couchdb-support/
> >>>
> >>>
> >>
>
>

Reply via email to