Ubuntu의 외부 IP에서 Node.js에 액세스 할 수 없습니다


17

나는 이것이 매우 멍청한 것이라고 확신하므로 용서하십시오. 우분투 10.04의 포트 8080에서 node.js 서버를 실행하려고합니다.

서버에서 iptables -L의 결과는 다음과 같습니다.

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

그리고 여기 nmap -p 8080의 결과가 있습니다 (모든 것이 열려 있거나 열려 있어야하기 때문에 ip 주소를 편집했습니다)

nmap 173.203.xxx.xxx -p 8080 -A

Starting Nmap 5.00 ( http://nmap.org ) at 2011-05-19 22:52 PDT
Interesting ports on xxx (173.203.xxx.xxx):
PORT     STATE  SERVICE    VERSION
8080/tcp closed http-proxy

지구상에서 8080이 폐쇄 된 이유는 무엇입니까? 이것을 추가해도 도움이되지 않았습니다.

iptables -A OUTPUT -p tcp  --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp  --dport 8080 -j ACCEPT

정말 혼란 스러워요.

도움이 될 경우에 이것을 추가 할 것입니다.

 netstat -pan | grep 80
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN          16785/node      
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      16471/apache2

아파치의 포트 80에서 실행되는 일반 웹 사이트에 액세스 할 수 있지만 node.js 서버는 외부에서 액세스 할 수 없습니다. 서버 자체에서 액세스하면 정상적으로 작동합니다.

그래서 내 질문은 : 어떻게 이것을 디버깅 할 것인가? 일부 포트를 차단하는 iptables 이외의 다른 것이있을 수 있습니까? 그것이 무엇인지 어떻게 알 수 있습니까?

도움을 주시면 감사하겠습니다!


Google을 통해 온 사람들에게 : Google 클라우드에서 서비스를 호스팅하고이 문제에 직면 한 경우 먼저 클라우드 방화벽 의 예외 규칙과 운영 체제 방화벽에서 포트를 추가했는지 확인하십시오
Atul

답변:


29

마지막 netstat 출력을 추가해 주셔서 감사합니다. node.js가 localhost IP (예 : 127.0.0.1)에서 수신 중이므로 외부에서 node.js에 액세스 할 수 없습니다. 0.0.0.0에서 청취하도록 node.js를 구성해야 시스템의 모든 IP에서 연결을 승인 할 수 있습니다.

var http = require('http');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(8080, "0.0.0.0");
console.log('Server running at http://0.0.0.0:8080/');

나는 그것을 의심했지만 0.0.0.0 전에는 결코 오지 않았으므로 무시했습니다. 나는 당신의 수정을 적용했고, 그랬습니다. 감사합니다!
Mikael Gramont

나는 또한이 문제가있다. 이 코드를 따랐지만 nodejs 서버는 여전히 외부에서 액세스 할 수 없습니다.
xybrek은

예, 여기도 마찬가지입니다.

1
나를 위해 작동하지 않았다
Jitendra Pancholi

노드 v8.1.3와 맥 OS 시에라에 나를 위해 작동하지 않았다
Liran H에게

4

netstat 출력에 따르면 포트 8080은 로컬 호스트 인 127.0.0.1에 대해서만 열려 있으므로 서버 (localhost)에서 액세스 할 수 있지만 다른 곳에서는 액세스 할 수 없습니다.

올바른 출력은 다음과 같아야합니다

0.0.0.0:8080

0

나는 같은 문제가 있었다.

나는 다음을했다

  1. Google Cloud Console에서 Nodejs에 사용중인 포트를 활성화해야합니다.
  2. 다음 링크를 사용하여 우분투 서버에서 동일한 포트를 활성화 하십시오 https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-14-04

  3. 그리고 마지막으로 누락 된 것은 네트워킹-> 방화벽 규칙-> 기본 허용 내부-> 모든 IP 주소 0.0.0.0/0입니다.

이 이미지를보십시오

끝난

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