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


27

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

我已经通过安装了CouchDB

资质安装ouchdb

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

telnet本地主机5984

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

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

iptables -A输入-p tcp --dport 5984 -j接受

但这没有帮助。

这是运行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上的另一台计算机,我仍然无法连接。


这个问题在Ubuntu 12中仍然存在。您认为软件包维护者现在可以解决此问题吗?
Mark E. Haase 2012年

Answers:


33

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


3
结果为“ 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实际上并没有停止。这可能可以解释我的问题,因为这意味着它可能永远不会重新启动,并且可能永远都不会收到BindAddress的更改
rcampbell

3
是的,我正在作为后台进程运行。一旦我使用Couchdb -d杀死了Couchdb并重新启动它,它便对我有用
Kristian

2
这个答案帮助了我!我想分享的是,您可以使用Futon Web界面轻松更改此设置,而不必在磁盘上查找和编辑实际的配置文件。只需导航至127.0.0.1:5984/_utils/config.html(或设置的等效URL)并双击选项值,进行编辑,然后单击绿色的复选标记。
史蒂夫·本纳

@SteveBenner不幸的是127.0.0.1:5984/_utils/config.html没有带任何东西!
Dr.jacky

@rcampbell bed.ini在哪里?
Dr.jacky


7

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


对我来说也一样-仅在终止波束处理之后,然后执行长沙发-d,然后停止/启动服务..新设置才生效。
鲍比


4

配置文档

bind_address

如果您在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或其他任何计算机)。


虽然这个答案很旧,但似乎可以找到正确的位置。Futon已被Fauxton取代,但是我认为人们会在配置中更改bind_address的要旨。
Scott Biggs

2

我遇到了这个问题,最终我的问题是显然在我的Ubuntu安装中已经安装了ouchdb。我一直在编辑/ etc / couchdb下的配置文件,但实际上正在运行的是从/ usr / local / etc / couchdb中提取配置。

提示是/ etc / couchdb中的配置提到了沙发0.10,但是我刚刚安装了1.0.1。


1

iptables -L -n -v将显示您当前的防火墙规则。在确定规则之前,先看看是否有丢包的数据包。


表格中没有列出DENY规则。否则,将有3个ACCEPT,一个是5984,两个是8080的副本。我不确定为什么8080有两个完全相同的副本,当我尝试在我们的网络外部访问Tomcat(在8080上运行)时,它甚至会失败尽管我们网络上的计算机可以很好地达到Tomcat的要求。
rcampbell

介意显示输出?如果需要,请取出您的IP。
比尔·魏斯

运行lsof -i -n -P | grep LISTEN和发布该如何?您正在寻找CouchDB流程及其绑定的内容。如果是127.0.0.1:5984,则需要配置CouchDB来侦听外部连接。如果是这样*:5984,那么至少正确配置了CouchDB :)
Bill Weiss

嗨,比尔,很抱歉没有尽快回复。我已经将您要求的原始转储发布到该问题。
rcampbell

lsof输出怎么样?
Bill Weiss,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.