新手求教,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 就是不显示内容,完全不知道怎么回事,求助大家.
根据你描述的情况,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. 网络连接测试
最后,确保从客户端能够正常连接到服务器的指定端口。可以使用 telnet
或 nc
(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’
[ <=> ] 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应用在启动时使用正确的端口。
可能的原因和解决方法
-
Node.js 应用未运行或未绑定到正确的端口:
- 确认你的Node.js应用是否已经启动,并且正在监听某个端口。
- 你可以通过检查Node.js进程来确认这一点。可以使用以下命令查看进程:
ps aux | grep node
-
检查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'
。
- 确保你的Node.js应用代码中包含监听一个端口的代码。例如,如果你的应用应该监听3000端口,可以这样写:
-
防火墙配置:
- 你提到iptables中已经打开了所有端口,但为了保险起见,可以检查一下端口是否确实开放:
sudo iptables -L -v -n
- 确保没有其他规则阻止流量通过目标端口(例如3000)。
- 你提到iptables中已经打开了所有端口,但为了保险起见,可以检查一下端口是否确实开放:
-
SELinux 配置:
- 如果CentOS启用了SELinux,它可能会阻止某些服务的运行。可以临时禁用SELinux来排除问题:
sudo setenforce 0
- 如果CentOS启用了SELinux,它可能会阻止某些服务的运行。可以临时禁用SELinux来排除问题:
-
Node.js 版本问题:
- 确认你的Node.js版本与你的应用兼容。有时版本差异可能导致一些意想不到的行为。
希望这些信息能帮助你解决问题。如果上述步骤都不能解决问题,请提供更多详细信息以便进一步排查。