O Nginx e o proxy reverso do CouchDB não funcionam

2

Estou tentando fazer o proxy [ link para o link . Estou executando nginx para proxy. Eu segui o mesmo método mencionado no link ,

    location /couchdb {
        rewrite /couchdb/(.*) /$1 break;
        proxy_pass http://127.0.0.1:5984;
        proxy_redirect          off;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    X-Real-IP       $remote_addr;
    } 

mas quando executo o curl localhost / couchdb eu recebo o seguinte erro

{"error":"not_found","reason":"no_db_file"}

No entanto, quando executo o curl localhost: 5984, recebi uma resposta válida do couchdb.

{"couchdb":"Welcome","uuid":"337bb4394efe84536a68a63eee55333f","version":"1.5.0","vendor":    {"name":"The Apache Software Foundation","version":"1.5.0"}}

Mas quando eu executo o curl localhost: 5984 / couchdb eu recebo o mesmo erro (e log) que estou recebendo via proxy reverso.

O arquivo de log couchdb diz a seguir

[Fri, 24 Jan 2014 20:41:29 GMT] [debug] [<0.120.0>] 'GET' /couchdb {1,0} from "127.0.0.1"
Headers: [{'Accept',"*/*"},
      {'Connection',"close"},
      {'Host',"localhost"},
      {'User-Agent',"curl/7.32.0"},
      {'X-Forwarded-For',"127.0.0.1"},
      {"X-Real-Ip","127.0.0.1"}]
[Fri, 24 Jan 2014 20:41:29 GMT] [debug] [<0.120.0>] OAuth Params: []
[Fri, 24 Jan 2014 20:41:29 GMT] [error] [<0.1114.0>] Could not open file /var/lib/couchdb/couchdb.couch: no such file or directory
[Fri, 24 Jan 2014 20:41:29 GMT] [debug] [<0.120.0>] Minor error in HTTP request: {not_found,no_db_file}
[Fri, 24 Jan 2014 20:41:29 GMT] [debug] [<0.120.0>] Stacktrace: [{couch_httpd_db,do_db_req,2,
                                 [{file,"couch_httpd_db.erl"},{line,239}]},
                             {couch_httpd,handle_request_int,5,
                                 [{file,"couch_httpd.erl"},{line,332}]},
                             {mochiweb_http,headers,5,
                                 [{file,"mochiweb_http.erl"},{line,94}]},
                             {proc_lib,init_p_do_apply,3,
                                 [{file,"proc_lib.erl"},{line,239}]}]
[Fri, 24 Jan 2014 20:41:29 GMT] [info] [<0.120.0>] 127.0.0.1 - - GET /couchdb 404
[Fri, 24 Jan 2014 20:41:29 GMT] [debug] [<0.120.0>] httpd 404 error response:
{"error":"not_found","reason":"no_db_file"}

Acredito que minha configuração nginx está correta, por isso, a solicitação está chegando ao couchdb. Se o arquivo em falta couchdb.couch o log diz é problema, então por que este banco de dados não está causando problemas quando o acessamos diretamente na porta 5984. Parece que o couchdb mochiweb está confundindo alguma coisa.

Estou vendo o mesmo comportamento em duas distribuições diferentes

Ubuntu 10.04: CouchDB V 1.10.0 ArchLinux 3.10: CouchDB V 1.5.0

    
por Farrukh Arshad 24.01.2014 / 22:06

4 respostas

1

Eu resolvi isso adicionando

rewrite /couchdb / break;

para acessá-lo através de localhost / couchdb. A regra que eu mencionei

rewrite /couchdb/(.*)  /$1 break;

funcionará para localhost / couchdb / db1 etc.

    
por 15.08.2017 / 11:16
0

Eu encontrei o mesmo problema, você pode combinar as duas regras usando vários grupos de captura:

rewrite /couch(/)?(.*) /$2 break;
    
por 22.05.2014 / 05:08
0

Veja uma configuração que funciona bem para consulta, visualização e replicação:

location /couchdb/(.*)$ {
    rewrite /couchdb/(.*) /$1 break;
    proxy_pass http://127.0.0.1:5984;
    proxy_pass_header Accept;
    proxy_pass_header Server;
    keepalive_requests 1000;
    add_header 'Access-Control-Allow-Origin' '*';
    proxy_redirect  off;
    proxy_buffering off;
    proxy_set_header Host $host;
    proxy_set_header Authorization ""; # or according to server.ini
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header    X-Real-IP       $remote_addr;
}
    
por 24.08.2015 / 11:12
0

A resposta deve ser, alterou essa linha proxy_pass http://127.0.0.1:5984 para proxy_pass http://127.0.0.1:5984/ . Você vê isso, uma barra "/" anexada ao URL proxy_pass. Com uma barra, o nginx apenas anexará a string após "/ couchdb /", e o couchdb não será incluído. Isso é um truque sutil.

    
por 17.12.2016 / 11:16