即使在防火墙上启用端口 8000 后也未启用 Ubuntu 18

port 8000 not enable even after enable it on firewall Ubuntu 18

我在 ubuntu 18 进入数字海洋时遇到了一个奇怪的行为,我刚刚创建了一个 droplet 并且没有使用 DO 防火墙但是尝试启用端口 8000 进入服务器,如下所示:

sudo ufw allow 8000/tcp

当我检查我的端口规则时它没问题,我的意思是它确实是我需要的,还有更多(因为我还添加了 udp)

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
80/udp                     ALLOW       Anywhere
443/udp                    ALLOW       Anywhere
8000/tcp                   ALLOW       Anywhere
8000/udp                   ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)
80/udp (v6)                ALLOW       Anywhere (v6)
443/udp (v6)               ALLOW       Anywhere (v6)
8000/tcp (v6)              ALLOW       Anywhere (v6)
8000/udp (v6)              ALLOW       Anywhere (v6)

当我 运行 一个使用端口 8000 的烧瓶服务进入服务器时,是这样的:

FLASK_APP=app.py flask run --host=127.0.0.1 --port=8000

我可以在服务器内部得到响应,例如:

curl 127.0.0.1:8000

但是当我尝试在网站上做同样的事情时,我被拒绝连接,例如:

curl IPSERVER:8000

回复:

curl: (7) Failed to connect to IPSERVER port 8000: Connection refused

我也使用此服务检查端口状态:https://www.yougetsignal.com/tools/open-ports/

它说端口 8000 已关闭,但我启用了它并且在 DO 上没有防火墙(我有一个但我删除以测试它仍然无法正常工作)

有谁知道可能是什么? Ubuntu18还有别的地方可以启用吗?我应该在进行这些更改之前重新启动服务器吗?

您需要调用您的脚本;

--host=<your public ip> 如果您只想绑定到指定的地址。

--host=0.0.0.0 绑定到所有可用地址。

--host=127.0.0.1 只会绑定到环回地址。

Quick Start 文档指出;

Externally Visible Server

If you run the server you will notice that the server is only accessible from your own computer, not from any other in the network. This is the default because in debugging mode a user of the application can execute arbitrary Python code on your computer.

If you have the debugger disabled or trust the users on your network, you can make the server publicly available simply by adding --host=0.0.0.0 to the command line:

$ flask run --host=0.0.0.0

This tells your operating system to listen on all public IPs.