Ubuntu 9.04 서버에서 외부 CouchDB 인스턴스에 액세스 할 수없는 이유는 무엇입니까?


27

업데이트 : 지금 작동하고 있습니다. Jim Zajkowski의 답변을 통해 /etc/init.d/couchdb 재부팅 호출이 실제로 인스턴스를 재부팅하지 않았 음을 감지 할 수 있었습니다. CouchDB 프로세스를 수동으로 종료하고 새 인스턴스를 시작한 후 필요한 BindAddress 변경 사항을 선택했습니다.

나는 CouchDB를 통해 설치했다

적성 설치 couchdb

내 서버에서 연결할 수 있습니다

텔넷 로컬 호스트 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 | 그렙 5984

tcp        0      0 127.0.0.1:5984          0.0.0.0:*               LISTEN

" BindAddress = 0.0.0.0"을 갖도록 couch.ini 를 구성 하고 재부팅하므로 모든 인터페이스에서 수신 대기 해야 합니다. "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의 다른 컴퓨터에서도 여전히 연결할 수 없습니다.


이 문제는 여전히 우분투 12에 존재합니다. 패키지 관리자가이 문제를 해결했다고 생각하십니까?
Mark E. Haase

답변:


33

무엇합니까 netstat -an | grep 5984말은? 127.0.0.1:5984또는 말합니까 *:5984? 이 경우 127.0.0.1모든 인터페이스를 수신하도록 couchdb를 설정해야합니다.


3
"tcp 00 127.0.0.1:5984 0.0.0.0:* LISTEN"이 결과입니다. "BindAddress = 0.0.0.0"을 갖도록 couch.ini를 구성하고 재부팅하므로 모든 인터페이스에서 수신 대기해야합니다. 여기 이상한 부분이 있습니다 : "sudo /etc/init.d/couchdb stop"을 실행 한 다음 netstat를 실행하면 여전히 위 항목이 나타납니다. CouchDB가 실제로 멈추지 않는 것처럼 보입니다. 그것은 아마 재부팅 결코 의미하며, 아마도을 BindAddress 변화를 포착하지 않기 때문에 이것은, 내 문제를 설명 할 수
rcampbell

3
그래, 나는 백그라운드 프로세스로 실행 중이었다. 내가 couchdb -d를 사용하여 couchdb를 죽이고 다시 시작한 후에 그것은 나를 위해 일했다
Kristian

2
이 답변이 도움이되었습니다! 디스크에서 실제 구성 파일을 찾아서 편집하지 않고도 Futon 웹 인터페이스를 사용하여이 설정을 쉽게 변경할 수 있음을 공유하고 싶었습니다 . 127.0.0.1:5984/_utils/config.html(또는 설정에 해당하는 URL)로 이동 하여 옵션 값을 두 번 클릭하고 편집 한 다음 녹색 확인 표시를 클릭하십시오.
Steve Benner 2016 년

@SteveBenner 불행히도 127.0.0.1:5984/_utils/config.html은 아무것도 가져 오지 않습니다!
Dr.jacky

@rcampbell couch.ini는 어디에 있습니까?!
Dr.jacky


7

이것이 작동하려면 어떤 이유로 든 실행중인 erlang 프로세스를 수동으로 종료해야한다는 것을 알았습니다. ps ax | grep beam얼랭 프로세스를 드러내야한다. 당신은 0:00 /usr/lib/erlang/erts출력 어딘가에서 무언가를 얻어야한다 . 이 프로세스를 종료 한 다음 실행 /etc/init.d/couchdb restart하면 새 구성 파일이로드됩니다.


빔 프로세스를 종료 한 후 couchdb -d를 수행 한 다음 서비스 중지 / 시작을 수행 한 후에 만 ​​새 설정이 적용되었습니다.
Bobby

4

가정용 PC / Mac에서 다음 명령을 실행하십시오.

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

다음은 브라우저에서 열기 localhost : 5984 / _utils ... 그것은 나를 위해 작동


4

구성 문서 :

bind_address

Futon 구성 패널에서 변경 한 경우 다른 작업을 수행 할 필요가 없습니다 (db 재부팅 등).

여기에 이미지 설명을 입력하십시오

기본 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 설치에 couchdb가 이미 설치되어 있다는 문제가 발생했습니다. / etc / couchdb에서 구성 파일을 편집했지만 실제로 실행중인 파일은 / usr / local / etc / couchdb에서 구성을 가져 오는 것입니다.

팁은 / etc / couchdb의 구성이 소파 0.10을 언급했지만 1.0.1을 설치 한 것입니다.


1

iptables -L -n -v현재 방화벽 규칙을 보여줍니다. 규칙에 도달하기 전에 해당 패킷을 삭제하는 패킷이 있는지 확인하십시오.


표에 나열된 거부 규칙이 없습니다. 그렇지 않으면, 세 개의 ACCEPT가 있고, 하나는 5984에 대해 두 개는 8080에 대해 두 개의 복제본이 있습니다. 왜 8080에 대해 두 개의 정확한 복제본이 있는지 확실하지 않으며, 네트워크 외부에서 Tomcat (8080에서 실행)을 누르려고하면 실패합니다. 우리 네트워크의 머신은 Tomcat에 잘 맞습니다.
rcampbell

출력을 보여주는 마음? 필요한 경우 IP를 꺼내십시오.
Bill Weiss

그것을 실행 lsof -i -n -P | grep LISTEN하고 게시하는 것은 어떻습니까? 당신은 CouchDB 프로세스를 찾고 있으며, 그것이 무엇에 바인딩되어 있는지. 이 경우 127.0.0.1:5984외부 연결을 수신하도록 CouchDB를 구성해야합니다. 그것의 경우 *:5984, 음, 적어도 CouchDB를 구성한다 권리 :
빌 와이즈

안녕하십니까, 더 빨리 응답하지 않아서 죄송합니다. 요청한 원시 덤프를 질문에 게시했습니다.
rcampbell

lsof결과는 어떻습니까?
Bill Weiss
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.