当前位置: 首页>>技术教程>>正文


linux – 为什么我不能在Ubuntu 9.04服务器上从外部访问CouchDB实例?

, , ,

问题描述

更新:我现在可以正常工作了。 Jim Zajkowski的回答帮助我检测到/etc/init.d/couchdb重新启动调用实际上并未重新启动实例。在我手动终止了CouchDB进程并启动了一个新实例之后,它选择了所需的BindAddress更改。

我已经通过安装了CouchDB

aptitude install couchdb

在我的服务器上,我可以通过

telnet localhost 5984

并执行RESTful命令。当我尝试从网络上的另一台计算机或网络外部的计算机访问服务器时,出现“连接已重置”错误。我已经在路由器上设置了端口转发,并且可以通过Apache,Tomcat,SSH等访问该服务器。

我是Linux /Ubuntu的新手,所以不确定是否有默认防火墙阻止连接,所以我运行了:

iptables -A INPUT -p tcp –dport 5984 -j ACCEPT

但这没有帮助。

这是运行iptables -L -n -v的转储

Chain INPUT (policy ACCEPT 2121K packets, 1319M bytes)
 pkts bytes target     prot opt in     out     source               destination
   70  3864 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:5984
    9  1647 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8080
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8080

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 1708K packets, 1136M bytes)
 pkts bytes target     prot opt in     out     source               destination

我认为显示为5984传输的字节归因于我的本地主机连接。

这是运行netstat -an的转储。 grep 5984

tcp        0      0 127.0.0.1:5984          0.0.0.0:*               LISTEN

我将ouch.ini配置为具有”BindAddress=0.0.0.0″并重新启动,因此它应该在所有接口上进行监听。当我运行“ sudo /etc/init.d/couchdb stop”然后运行netstat时,我仍然看到上面的条目。看起来CouchDB实际上并没有停止。这可能解释了我的问题,因为这意味着可能意味着CouchDB从未真正重启过,也从未获得过BindAddress更改。

我手动终止了CouchDB进程,然后再次启动了它。现在netstat显示:

 tcp        0      0 127.0.0.1:5984          0.0.0.0:*               LISTEN
 tcp        0      0 127.0.0.1:5984          127.0.0.1:35366         TIME_WAIT

即使从LAN上的另一台计算机,我仍然无法连接。

最佳方案

netstat -an | grep 5984说什么?它说127.0.0.1:5984还是*:5984吗?如果它是127.0.0.1,则需要将ouchdb设置为侦听所有接口。

次佳方案

您必须在/etc/couchdb/default.ini中更改bind_address。然后重新启动服务,然后重试。

第三种方案

我注意到,为了使其正常工作,您必须出于某种原因手动终止正在运行的erlang进程。 ps ax | grep beam应该显示错误过程,您应该在输出中某处的0:00 /usr/lib/erlang/erts中得到一些东西。如果您取消了此过程,然后运行/etc/init.d/couchdb restart,则将加载新的配置文件。

第四种方案

在家用PC /Mac上,运行以下命令:

ssh -L 5984:localhost:5984 YOUR-SERVER-IP-HERE

接下来在浏览器中打开localhost:5984 /_utils …对我有用

第五种方案

Configuration docs

如果您在Futon配置面板中进行更改,则无需执行其他任何操作(重新引导数据库等):

更改默认的bind_address之前:

peter@earth:~/$ netstat -an | grep 5984
tcp        0      0 127.0.0.1:5984          0.0.0.0:*               LISTEN

更改为0.0.0.0后:

peter@earth:~/$ netstat -an | grep 5984
tcp        0      0 0.0.0.1:5984          0.0.0.0:*               LISTEN

请注意非专家:无法访问您的计算机(通常是您本地网络之外的任何计算机)仍将无法访问您的计算机(CouchDB或其他任何计算机)。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/9001.html,未经允许,请勿转载。