如何通过服务器的外部IP地址使Spring Boot应用程序可访问?

时间:2019-01-08 07:19:41

标签: java spring-boot

我是Spring Boot的新手。我有一个用Spring Boot编写的REST API应用程序。当我执行Spring Boot JAR时,一切正常,我可以使用localhost地址而不是实际的地址访问REST API:

http://localhost:8083/articles

但是,当我尝试通过外部IP地址访问REST API时,我做不到:

http://100.90.80.70:8083/articles
Linux终端中的

netstat -antu命令为我提供了以下输出:

Active Internet connections (servers and established)
Proto   Recv-Q  Send-Q  Local Address  Foreign Address  State
tcp6       0      0      :::8083            :::*        LISTEN

据我了解,我的应用只能在localhost中访问,因为它没有foreign address

我的application.properties文件只有这一行:

server.port=8083

此外,当我尝试将server.address行添加到application.properties时,

server.address=100.90.80.70
server.port=8083

我有以下ExceptionCaused by: java.net.BindException: Cannot assign requested address

所以我的问题是:如何通过服务器的外部IP地址使Spring Boot应用程序可访问?谢谢。

3 个答案:

答案 0 :(得分:1)

正如@Mark所说,问题出在防火墙上。我已经在防火墙设置中打开了8083端口,现在可以通过外部IP地址访问我的REST API应用程序:

http://100.90.80.70:8083/articles

用于检查防火墙状态的Linux命令:

sudo ufw status verbose

打开8083端口以通过TCP协议进行远程访问:

sudo ufw allow 8083/tcp

此处有更多设置:https://www.cyberciti.biz/faq/how-to-open-firewall-port-on-ubuntu-linux-12-04-14-04-lts/

答案 1 :(得分:0)

我通过在路由器上配置端口转发来修复相同的问题,以允许来自公共 ip 的流量

答案 2 :(得分:0)

在我的 OpenStack 环境中,经过多次调试后,解决方案是创建一个新的安全组规则,如下所示: Security Group Rule

请注意,我的 Spring Boot 应用程序部署在端口 8080 上。 我还注意到,在 ubuntu18 上,防火墙默认是禁用的。它没有造成任何问题。