小编Wes*_*ley的帖子

CouchDB复制在代理后面无法正常工作

注意:根据新信息进行了一些更新.旧观点已添加为以下评论. 注意:根据新信息进行一些更新(再次).旧的想法已被添加为下面的评论(再次).

我们在Apache反向代理后面的不同计算机上运行两个CouchDB实例.尝试在两个实例之间复制时:

curl -X POST http://user:pass@localhost/couchdb/_replicate -d '{ "source": "db1", "target": "http://user:pass@10.1.100.59/couchdb/db1" }' --header "Content-Type: application/json"
Run Code Online (Sandbox Code Playgroud)

(我们开始使用curl来调试问题)

我们收到类似于的错误:

{"error":"case_clause","reason":"{error,\n    {{bad_return_value,\n         {invalid_json,\n             <<\"<!DOCTYPE HTML PUBLIC \\\"-//IETF//DTD HTML 2.0//EN\\\">\\n<html><head>\\n<title>404 Not Found</title>\\n</head><body>\\n<h1>Not Found</h1>\\n<p>The requested URL /couchdb/db1/_local/01e935dcd2193b87af34c9b449ae2e20 was not found on this server.</p>\\n<hr>\\n<address>Apache/2.2.3 (Red Hat) Server at 10.1.100.59 Port 80</address>\\n</body></html>\\n\">>}},\n     {child,undefined,\"01e935dcd2193b87af34c9b449ae2e20\",\n         {gen_server,start_link,\n             [couch_rep,\n              [\"01e935dcd2193b87af34c9b449ae2e20\",\n               {[{<<\"source\">>,<<\"db1\">>},\n                 {<<\"target\">>,\n                  <<\"http://user:pass@10.1.100.59/couchdb/db1\">>}]},\n               {user_ctx,<<\"user\">>,\n                   [<<\"_admin\">>],\n                   <<\"{couch_httpd_auth, default_authentication_handler}\">>}],\n              []]},\n         temporary,1,worker,\n         [couch_rep]}}}"}
Run Code Online (Sandbox Code Playgroud)

因此,经过进一步的研究,似乎apache在不尝试访问CouchDB的情况下返回此错误(根据日志文件).在提供以下URL时要清楚

/couchdb/db1/_local/01e935dcd2193b87af34c9b449ae2e20
Run Code Online (Sandbox Code Playgroud)

Apache将请求传递给CouchDB并返回CouchDB的404错误.另一方面,当发生复制时,实际传递的URL是

/couchdb/db1/_local%2F01e935dcd2193b87af34c9b449ae2e20
Run Code Online (Sandbox Code Playgroud)

哪个apache确定是一个丢失的文档,并返回自己的404错误,没有将请求传递给CouchDB.这至少给了我一些新的线索,但如果有人有一个答案,我仍然可以使用帮助.

apache couchdb reverse-proxy

6
推荐指数
1
解决办法
3153
查看次数

标签 统计

apache ×1

couchdb ×1

reverse-proxy ×1