Nginx

Nginx 和 CouchDB 反向代理不起作用

  • August 15, 2017

我正在嘗試將 [ http://localhost:5984]代理到 [ http://localhost/couchdb]。我正在為代理執行 nginx。我遵循了http://wiki.apache.org/couchdb/Nginx_As_a_Reverse_Proxy中提到的相同方法,

   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;
   } 

但是當我執行 curl localhost/couchdb 我得到以下錯誤

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

但是,當我執行 curl localhost:5984 時,我得到了來自 couchdb 的有效響應。

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

但是當我執行 curl localhost:5984/couchdb 時,我得到了通過反向代理接收到的相同錯誤(和日誌)。

couchdb 日誌文件說明如下

[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"}

我相信我的 nginx 配置是正確的,這就是請求到達 couchdb 的原因。如果日誌中缺少的 couchdb.couch 文件有問題,那麼為什麼當我們直接在埠 5984 上訪問該數據庫時不會造成問題。看來 couchdb mochiweb 令人困惑。

我在兩個不同的分佈上看到相同的行為

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

我已經通過添加解決了這個問題

rewrite /couchdb / break;

通過 localhost/couchdb 訪問它。我提到的規則

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

將適用於 localhost/couchdb/db1 等。

我遇到了同樣的問題,您可以通過使用多個擷取組來組合這兩個規則:

rewrite /couch(/)?(.*) /$2 break;

引用自:https://serverfault.com/questions/569735