Re: Reverse proxy for a sub directory

2018-03-12 Thread max
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 :

> 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  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 :
> >
> >> 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  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  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 

Re: Reverse proxy for a sub directory

2018-03-12 Thread Renato
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  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 :
> 
>> 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  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  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/
>>> 
>>> 
>> 



Re: Reverse proxy for a sub directory

2018-03-12 Thread max
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 :

> 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  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  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/
> >
> >
>


Re: Reverse proxy for a sub directory

2018-03-12 Thread Sinan Gabel
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  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  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/
>
>


Re: Reverse proxy for a sub directory

2018-03-12 Thread Jan Lehnardt
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  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/