为什么我的网络服务器在端口 80 上可见,但在端口 5000 上不可见,即使明确“sudo ufw allowed 5000”?

为什么我的网络服务器在端口 80 上可见,但在端口 5000 上不可见,即使明确“sudo ufw allowed 5000”?

我有一个使用 ubuntu 18.04 的数字海洋 Droplet,并尝试按照本指南创建 Flask 应用程序并使用 Gunicorn + nginx 进行托管。

https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-gunicorn-and-nginx-on-ubuntu-18-04

因此,在指南的最开始部分附近,您创建了一个示例 Flask 应用程序(名为 myproject.py):

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "<h1 style='color:blue'>Hello There!</h1>"

if __name__ == "__main__":
    app.run(host='0.0.0.0')

然后,您可以通过执行以下操作来测试是否将其暴露在互联网上:

sudo ufw allow 5000
python myproject.py 

我的问题:

该应用程序在我的终端中似乎运行良好,但当浏览器尝试访问该网址时它无法加载。

现在对我来说奇怪的是,如果我运行这两个命令并启动应用程序,它会产生非常正常的输出:

(myprojectenv) root@ubuntu-s-1vcpu-1gb-nyc1-01:/home/root/myproject# python myproject.py 
 * Serving Flask app "myproject" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

但是当我真正继续访问 URL 上的 Droplet 时:http://165.227.205.175:5000(在谷歌浏览器中)

我收到经典的“站点无法访问错误”:

在此输入图像描述

此外,终端没有收到任何通知,我的烧瓶应用程序完全不知道有人试图访问它。

但是,如果我将应用程序更改为:

[... flask boilerplate ...]
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

然后运行:

sudo ufw allow 5000
python myproject.py

我可以看到该网站在以下位置可见: http://165.227.205.175!此外,Flask 应用程序清楚地生成日志(200 个请求...)然后再次稍微调整代码(因此我对端口号更加明确):

[... flask boilerplate ...]
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000)

再次运行命令:

sudo ufw allow 5000
python myproject.py

我现在在尝试加载时无法再次看到任何内容http://165.227.205.175再次,烧瓶应用程序似乎完全不知道我的浏览器尝试加载它。

“sudo ufw allowed 5000”命令的输出始终为:

Skipping adding existing rule
Skipping adding existing rule (v6)

我如何在这个问题上取得任何进展?

答案1

我通过销毁我的 Droplet 并重新启动成功解决了这个问题。我不确定到底发生了什么原因(可能是防火墙配置错误),但如果您从互联网上发现这个问题,我强烈建议您备份所有代码+数据,然后重新启动。很容易不成为您的第一选择。

相关内容