Linux打开防火墙放通端口以及修改flask运行命令使允许远程访问flask应用

发布于:2024-10-08 ⋅ 阅读:(9) ⋅ 点赞:(0)

        在默认情况下,Flask 开发服务器绑定到 127.0.0.1(即本地主机),这意味着它只能在运行 Flask 应用的机器上访问。为了让其他机器(包括远程机器)能够访问 Flask 应用,你需要将服务器绑定到所有的网络接口(即 0.0.0.0)。

  flask run 是 Flask 开发服务器的一个命令,用于在开发环境中启动 Flask 应用。默认情况下,Flask 开发服务器只监听 localhost127.0.0.1)。使用 --host=0.0.0.0 参数,Flask 会将监听地址修改为 0.0.0.0,这表示服务器会监听所有可用的 IP 地址,从而允许外部网络上的机器访问该应用。

启用远程访问的方法

  1. 修改 Flask 运行命令

    在运行 Flask 应用时,添加 --host=0.0.0.0 参数,这样 Flask 服务器就会监听所有网络接口。
    flask --app app run --host=0.0.0.0
    
  2. 安全考虑

    • 请注意,在生产环境中,直接使用 Flask 自带的开发服务器是不安全的。你应该使用像 Gunicorn、uWSGI 或其他 WSGI 服务器来运行 Flask 应用,并在前面加上一个反向代理服务器(如 Nginx 或 Apache)。
    • 开发环境中,确保防火墙和网络安全设置允许访问 Flask 服务器的端口(默认是 5000 端口)。

测试远程访问

  1. 确保端口开放

    • 确保防火墙允许来自远程机器的流量通过端口 5000(下文附放通端口命令)。
    • 在运行 Flask 应用的机器上,可以使用 netstat 或 lsof 命令检查端口是否正确绑定:
      netstat -tuln | grep 5000
      
  2. 测试远程访问

    • 在远程 Windows 机器上,打开浏览器,输入运行 Flask 应用的机器的 IP 地址和端口号:
      http://<Your-Server-IP>:5000
      
    • 例如,如果你的服务器 IP 是 192.168.1.100,你可以在浏览器中访问:
      http://192.168.1.100:5000
      

示例

假设你的 Flask 应用在 app.py 文件中,并且在服务器上运行:

  1. 启动 Flask 应用(服务器上)

    flask --app app run --host=0.0.0.0
    
  2. 访问 Flask 应用(远程 Windows 机器上)

    打开浏览器,输入 http://<Your-Server-IP>:5000

        通过将 Flask 运行命令中的 --host 参数设置为 0.0.0.0,你可以让 Flask 开发服务器监听所有网络接口,从而允许远程访问。但请务必注意安全性,尤其是在生产环境中。

打开防火墙放通端口的方法

        在 Ubuntu 中,ufw(Uncomplicated Firewall)是一个简单易用的防火墙管理工具。下面是通过 ufw 打开防火墙并允许特定端口(如 Flask 默认使用的 5000 端口)的步骤:

1. 检查 ufw 状态

首先,你可以检查 ufw 的当前状态:

sudo ufw status

如果 ufw 被禁用,会显示 Status: inactive

2. 启用 ufw

如果 ufw 目前是关闭状态,可以通过以下命令来启用它:

sudo ufw enable

3. 允许特定端口

为了允许来自外部的连接,你需要打开 Flask 使用的端口(默认是 5000)。可以使用以下命令来允许端口 5000

sudo ufw allow 5000

4. 重新检查 ufw 状态

在允许了端口之后,可以再次检查 ufw 状态,以确认规则已被添加:

sudo ufw status

你应该能看到类似以下的输出,表明 5000 端口已经被允许:

Status: active

To                         Action      From
--                         ------      ----
5000                       ALLOW       Anywhere

5. (可选)允许其他端口

假如你在生产环境中使用了其他服务,可能需要允许其他常用端口(如 80443 等),可以使用类似的命令:

sudo ufw allow 80    # 允许 HTTP
sudo ufw allow 443   # 允许 HTTPS

6. 其他 ufw 命令

  • 禁用 ufw

    sudo ufw disable
    
  • 删除规则
    如果需要删除某个规则,例如关闭 5000 端口,可以使用:

    sudo ufw delete allow 5000
    
  • 查看更详细的状态

    sudo ufw status verbose
    

注意事项

  • 请确保在开启防火墙规则时,确保其他应用不会受到影响。
  • 如果你在云服务器上(如 AWS、GCP 等),可能还需要在相应的平台控制台上设置网络安全组或防火墙规则,确保允许访问。

flask run --host=0.0.0.0 只会影响当前运行的 Flask 应用实例,而不会永久修改所有应用的配置。以下是详细的解释:

只对当前运行的实例有效

  • flask run --host=0.0.0.0 这条命令只会影响当前运行的 Flask 应用实例,并在你关闭服务器后失效。
  • 如果你再次运行 flask run 而不带 --host=0.0.0.0,Flask 仍然会默认监听 localhost

如何永久修改所有应用的默认设置

如果你希望所有应用都能默认监听所有可用的 IP 地址,你可以通过以下几种方式来实现:

1. 修改 Flask 配置文件

你可以在 Flask 应用的配置文件中设置 SERVER_NAME 或其他相关配置项,但这并不直接控制 flask run 的行为。flask run 主要用于开发环境,它有自己的默认行为。

2. 使用环境变量

你可以在启动 Flask 应用时设置环境变量来影响其行为。例如,使用 FLASK_RUN_HOST 环境变量:

export FLASK_RUN_HOST=0.0.0.0
flask run

这种方式在当前会话中有效,但如果你希望每次都自动设置,可以将其添加到你的 .bashrc 或 .bash_profile 文件中。

3. 使用 Flask 命令别名

如果你经常需要使用 --host=0.0.0.0 参数,可以为 flask run 创建一个命令别名:

alias flask-run='flask run --host=0.0.0.0'

然后你可以使用 flask-run 来替代 flask run,它会自动带上 --host=0.0.0.0 参数。


网站公告

今日签到

点亮在社区的每一天
去签到