前言
最近新上线项目,决定启用新的阿里云服务器,服务端项目打包之后部署到服务器,项目正常启动,在阿里云控制台开放指定端口之后接口访问不通,这里记录一下出现的问题的原因以及处理方案.
问题处理过程
首先说按照之前的新项目部署流程,服务端代码本地自测完成之后进行打包,部署到阿里云服务器,然后在阿里云控制台上将指定端口开放指定ip(一般测试环境都是对公司公网ip允许访问).
之前都是按照固有思维进行设置,从来没有想过为什么设置之后会生效以及还需要考虑哪些才会生效,这次出现问题算是给"不想不问"的思维逻辑上了一课!
首先说阿里云上部署的项目想被访问到,从安全组上开放指定端口开放指定端口肯定是必须的,但是安全组设置不是第一步,第一个需要考虑的是防火墙,对于阿里云服务器上部署的服务端应用,访问顺序如下:
接口请求最先触达的是防火墙,简单了解一下防火墙的作用.
防火墙主要是借助硬件和软件的作用于内部和外部网络的环境间产生一种保护的屏障,从而实现对计算机不安全网络因素的阻断。只有在防火墙同意情况下,用户才能够进入计算机内,如果不同意就会被阻挡于外.
所以在服务端项目运行正常的情况下,对于安全组开放指定端口后如果服务端接口访问不通,首先要看下防火墙是否开启,如果防火墙开启之后需要看下防火墙是否对指定端口进行开放.注意这里的开放指定端口与安全组的设置没有关系.关于查看防火墙是否开启要看Linux系统的版本,版本不同使用的命令是不同的,下面简单罗列一下常见版本对应的命令(注意以下命令没有特殊说明均在任意目录下执行):
CentOS 6以下:
查看防火墙开启状态: service iptables status 开启防火墙 service iptables start 关闭防火墙 service iptables stop
CentOS 7:
查看防火墙开启状态: systemctl status firewalld 开启防火墙 systemctl start firewalld.service 关闭防火墙 systemctl stop firewalld.service
ubantu:
查看防火墙开启状态: ufw status 开启防火墙 ufw enable 关闭防火墙 ufw disable
出现问题的阿里云服务器对应的Linux版本就是CentOS 7,查看了一下防火墙的状态是开启状态.
其中状态为active表示是开启状态,下面看下防火墙开放的端口有哪些.
查看防火墙允许开放的端口 firewall-cmd --list-ports
发现没有启动项目端口号,对防火墙开放指定端口操作如下:
防火墙对8091端口进行开放 firewall-cmd --add-port=8091/tcp --permanent
开启之后需要重新加载使配置生效
firewall-cmd --reload
重新访问接口发现接口访问正常.原来的阿里云服务器上进行部署项目只需要从安全组中开放指定端口是因为所在的阿里云服务器防火墙都是关闭状态.
总结
对于平常开发中一定要多问一个为什么,有疑问才会考虑原理,任何事情明白原理之后就算遇到类似问题脑海中会第一时间会想到问题可能出现在哪些方面,平常总常说:“出来混总是要还的!”,这句话在我们开发这里也同样适用,感觉有收获或是赞成的欢迎点赞或留言!