阿里云云服务器的端口配置问题
心血来潮花了9块9(学生价)买了个阿里云。因为后端只会一点 Node,所以上来第一件事就是按照官方教程把部署 Node 项目这个教程撸了一遍。
问题描述#
官方教程代码#
const http = require('http');
const hostname = 'ECS公网IP地址'; // 这里把文字换成自己的公网IP地址
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 http服务器,成功运行后可以在页面输出 Hello World。
报错#
报错了,因为之前写node只需要监听端口,没必要把IP地址也给写进去,所以我删了hostname,改成下面这样。
const http = require('http');
const hostname = 'ECS公网IP地址'; // 这里把文字换成自己的公网IP地址
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, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
运行成功,但是在外网用浏览器输入IP地址之后无法访问。
问题分析#
curl ip.cn
查询当前外网IP,没有问题,与阿里云提供的一致。
ping www.baidu.com
服务器可以访问外网
curl http://127.0.0.1:3000
正确输出 "Hello World",说明代码的编写没有问题。
代码没问题,服务器网络没问题,ip地址没问题。我估计应该是防火墙把端口禁掉了。
关闭防火墙#
身为小菜鸟,第一时间想到的就是把服务器的防火墙关掉。我的服务器是 CentOS7.0 ,与6.0不一样,CentOS7.0默认使用 firewall
作为防火墙。
systemctl stop firewalld.service
#停止firewall
systemctl disable firewalld.service
#禁止开机启动firewall
firewall-cmd --state
#查看防火墙状态,已经处于关闭状态
开Node服务器,浏览器访问还是失败。
好像没招了,问小伙伴,他们说可能是没有备案的原因。但是没备案的小伙伴说他用得好好的,而且我就买了一个月的服务器,再等半个月备案我也不需要用了。正打算放弃问客服,小伙伴说你装个Nginx试试,只要正确运行Nginx而且服务器没问题直接访问IP地址就能出现Nginx首页了。
安装 Nginx#
CentOS有两种方法安装Nginx,具体的自行谷歌吧。
安装完成,运行成功。
浏览器访问公网IP,无法访问。
从吃完中午饭13:00一直折腾到下午6:30左右,一动不动坐凳子上5个多小时了,不行了,休息吃完饭去。
解决#
既然Nginx正确运行,那只剩两个问题了,一个是没有备案,不过这个问题的可能性很小很小。还有一点就是虽然我CentOS上把防火墙关了,但云服务器上阿里云应该会有一些安全措施,导致一部分端口被禁,或者压根就没有把端口打开。
吃完饭,散完步,我就在云服务器控制台里一个一个的找,发现安全组里点击配置规则后有一个安全组规则,里面通过添加安全组规则可以开放需要用到的端口。默认只打开了两个端口。
总结#
这是一个简单的问题,不过需要一步步排除掉可能的原因。
如果身边有个后端或者运维的小伙伴在的话,应该可以很快意识到这个问题。独狼是走不远的,至少是走不快的。
其实在购买时就可以选取要开放的端口,第一次嘛,没有经验,都是直接默认选项。怪不得小伙伴说他服务器的配置都没有动过,应该是购买的时候就已经设置好的。
趁年轻,多踩坑。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗