我是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
我有以下Exception
:Caused by: java.net.BindException: Cannot assign requested address
。
所以我的问题是:如何通过服务器的外部IP地址使Spring Boot应用程序可访问?谢谢。
答案 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 上,防火墙默认是禁用的。它没有造成任何问题。