新手求教,centos 安装好Nodejs无法访问.

新手求教,centos 安装好Nodejs无法访问.

iptables 里所有端口打开了

iptables -apn 能看到 0.0.0.0:80 端口处在被监听

Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:872 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN

但是访问ip 就是不显示内容,完全不知道怎么回事,求助大家.


17 回复

根据你描述的情况,CentOS 上安装了 Node.js 之后无法通过 IP 访问服务。以下是一些可能的原因及解决方法:

1. 检查 Node.js 服务是否正确启动并监听正确的端口

首先确保你的 Node.js 应用程序已经正确启动,并且正在监听一个特定的端口(例如:3000)。你可以使用以下命令来检查 Node.js 进程:

ps aux | grep node

如果 Node.js 服务没有运行,尝试启动它:

node app.js

确保 app.js 文件中包含类似以下内容,以确保应用监听正确的端口:

const http = require('http');

const hostname = '0.0.0.0'; // 允许外部访问
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

2. 防火墙设置

尽管你提到 iptables 已经配置允许所有端口,但还是建议检查一下具体的防火墙规则。可以使用以下命令检查当前的 firewalld 设置:

sudo firewall-cmd --list-all

如果 firewalld 正在运行并且阻止了请求,添加相应的端口:

sudo firewall-cmd --add-port=3000/tcp --permanent
sudo firewall-cmd --reload

3. SELinux 设置

如果 SELinux 处于 enforcing 模式,可能会阻止某些网络操作。你可以临时将 SELinux 设置为 permissive 模式来测试是否是 SELinux 导致的问题:

sudo setenforce 0

如果问题解决,则需要调整 SELinux 策略或永久性地修改 SELinux 模式。

4. 检查 Node.js 应用日志

查看 Node.js 应用的日志文件,通常在终端中运行时会输出错误信息。如果是在后台运行,可以通过查看日志文件来查找错误原因。

tail -f /path/to/your/logfile.log

5. 网络连接测试

最后,确保从客户端能够正常连接到服务器的指定端口。可以使用 telnetnc (netcat) 命令进行测试:

telnet <server-ip> 3000

如果以上步骤均未解决问题,建议提供更多关于应用程序的具体细节,以便进一步诊断问题。


代码呢?

var http = require(‘http’); http.createServer(function (req, res) { res.writeHead(200, {‘Content-Type’: ‘text/plain’}); res.end(‘Hello Node.js\n’); }).listen(80); console.log(‘Server running’);

下面呢 sorry 才看到

node test.js 也能跑起来 Server running 会出现.

但是还是访问不了.

没问题呀

$ sudo node ptest.js &
[1] 12704

$ Server running

$ wget http://localhost –2013-04-17 10:49:23-- http://localhost/ Resolving localhost (localhost)… 127.0.0.1 Connecting to localhost (localhost)|127.0.0.1|:80… connected. HTTP request sent, awaiting response… 200 OK Length: unspecified [text/plain] Saving to: `index.html’

[ &lt;=&gt;                                                            ] 14          --.-K/s   in 0s      

2013-04-17 10:49:23 (1.54 MB/s) - `index.html’ saved [14]

$ cat ptest.js 
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello Node.js\n');
}).listen(80);
console.log('Server running');

$ cat index.html 
Hello Node.js

代码没问题。还是端口的问题吧。

[root[@colud](/user/colud) ~]# wget http://198.100.114.49

–2013-04-17 22:58:36-- http://198.100.114.49/

正在连接 198.100.114.49:80… 已连接。 已发出 HTTP 请求,正在等待回应… 200 OK 长度:未指定 [text/plain] 正在保存至: “index.html.1”

[ <=>                                                                           ] 14          --.-K/s   in 0s      

2013-04-17 22:58:36 (1.91 MB/s) - “index.html.1” 已保存 [14]

我用服务器访问没问题, 但是用外网就进不去了 …

真郁闷啊 完全不知道怎么回事…

外网?外网要用外网的IP啊,你要有固定IP,或者ADSL+路由器的转发规则+花生壳+一个域名 注意: 192,开头的是内网的IP

你在加州?你的ISP可能没给你 80 端口。

12	16.901	216.218.213.251	216.218.213.251	Morgan Hill, CA, United States
13	19.253	199-73-121-10.static.gorillaservers.com	199.73.121.10	, ,
14	7.882	198-100-114-49.static.gorillaservers.com	198.100.114.49	, ,

成功了 非常感谢各位, 奶奶的 必须直接绑定外网IP地址才行,这样就可以外网访问了.

非常感谢!

写个小总结吧.

本人比较懒一向不爱用本地环境来做测试,所以直接淘宝买了一个VPS centos 5.6 (第一个) 花了两天时间研究明白linux怎么装node(第一次接触linux,大家不要见怪),然后发现无论绑定外网IP 还是 内网IP 还是不绑定IP 都没办法通过外网访问. 随后想到可能是这台VPS的IP是通过ISP的地址分配的,用ifconfig发现果然是这样,网卡上绑定的是VPS的内网IP. 随后退款.

又新买了一个VPS,是美国的,IP是直接绑定到网上的,今天早上直接用代码绑定IP,发现可以访问了.

中间很感谢大家的帮助,非常感谢!

基础不错。

哈哈 多谢多谢 还得像大神学习!

根据你的描述,你的Node.js应用似乎没有正确地绑定到指定的端口。通常情况下,Node.js应用会监听一个特定的端口(例如3000),而不是默认的HTTP端口80。此外,你可能需要确保Node.js应用在启动时使用正确的端口。

可能的原因和解决方法

  1. Node.js 应用未运行或未绑定到正确的端口

    • 确认你的Node.js应用是否已经启动,并且正在监听某个端口。
    • 你可以通过检查Node.js进程来确认这一点。可以使用以下命令查看进程:
      ps aux | grep node
      
  2. 检查Node.js应用代码

    • 确保你的Node.js应用代码中包含监听一个端口的代码。例如,如果你的应用应该监听3000端口,可以这样写:
      const http = require('http');
      
      const hostname = '127.0.0.1';
      const port = 3000;
      
      const server = http.createServer((req, res) => {
        res.statusCode = 200;
        res.setHeader('Content-Type', 'text/plain');
        res.end('Hello World\n');
      });
      
      server.listen(port, hostname, () => {
        console.log(`Server running at http://${hostname}:${port}/`);
      });
      
    • 如果你希望Node.js应用监听所有IP地址上的端口,可以将hostname设置为'0.0.0.0'
  3. 防火墙配置

    • 你提到iptables中已经打开了所有端口,但为了保险起见,可以检查一下端口是否确实开放:
      sudo iptables -L -v -n
      
    • 确保没有其他规则阻止流量通过目标端口(例如3000)。
  4. SELinux 配置

    • 如果CentOS启用了SELinux,它可能会阻止某些服务的运行。可以临时禁用SELinux来排除问题:
      sudo setenforce 0
      
  5. Node.js 版本问题

    • 确认你的Node.js版本与你的应用兼容。有时版本差异可能导致一些意想不到的行为。

希望这些信息能帮助你解决问题。如果上述步骤都不能解决问题,请提供更多详细信息以便进一步排查。

回到顶部