如何在宝塔面板后的阿里云服务器运行Flask项目并公网可以访问?

在你的服务器安装宝塔面板

宝塔面板是服务器运维管理系统
使用宝塔前: 手工输入命令安装各类软件,操作起来费时费力并且容易出错,而且需要记住很多Linux的命令,非常复杂。

使用宝塔后: 2分钟装好面板,一键管理服务器,鼠标点几下就能替代以前的复杂繁多命令,操作简单,看一眼就会使用。
https://www.bt.cn/new/download.html

用FTP工具FileZilla进行传输Flask项目

在这里插入图片描述

设置启动文件

在这里插入图片描述

公网ip访问会报错

* Serving Flask app 'run'
* Debug mode: on
Cannot assign requested address

Nginx 反向代理 Flask实现公网可访问

用宝塔面板安装Nginx

如果服务器的公网 IP 地址与你在 Flask 应用中设置的 IP 地址不一致,有可能是因为服务器处在一个局域网内,而公网 IP 地址是由路由器或防火墙分配的。在这种情况下,你需要设置端口转发或使用反向代理等方式来实现公网访问。

cd www/server/panel/vhost/nginx

一种常见的方式是使用 Nginx 反向代理 Flask 应用。反向代理可以将客户端的请求转发到 Flask 应用所在的服务器,然后将应用的响应返回给客户端,从而实现公网访问。

具体来说,你需要在服务器上安装并配置 Nginx,然后在 Nginx 的配置文件中添加反向代理规则,将客户端的请求转发到 Flask 应用所在的端口。

在这里插入图片描述

那么需要将 Flask 应用监听的地址改为公网 IP 地址,而不是使用 Nginx 反向代理到本地 IP 地址。

具体来说,你需要将 Flask 应用的监听地址修改为 0.0.0.0,这样 Flask 应用就会监听所有可用的网络接口,包括公网 IP 地址。例如,你可以在 Flask 应用中加入以下代码:

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

其中,host=‘0.0.0.0’ 表示 Flask 应用会监听所有可用的网络接口,包括公网 IP 地址。port=5000 表示 Flask 应用会监听 5000 端口。

然后,在 Nginx 配置文件中,你可以使用以下规则将公网流量反向代理到 Flask 应用:

location / {
    
    
    proxy_pass http://localhost:5000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

其中,proxy_pass http://localhost:5000 表示将所有请求转发到本地的 5000 端口,也就是 Flask 应用所在的端口。proxy_set_header Host $host 和 proxy_set_header X-Real-IP $remote_addr 则是设置请求头信息,保证 Flask 应用能够正确获取请求的主机名和 IP 地址。

需要注意的是,如果你想要将网站部署到公网上,需要确保服务器的网络环境和安全环境都得到了充分的保护,以避免出现安全问题。建议在部署前先进行充分的安全评估和测试。

例如,假设 Flask 应用监听在 127.0.0.1:5000,你可以在 Nginx 的配置文件中添加以下规则:

server {
    
    
    listen 80;
    server_name example.com;

    location / {
    
    
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

以上配置将客户端的请求转发到 127.0.0.1:5000,并设置了 Host 和 X-Real-IP 头信息,以便 Flask 应用正确处理请求。

需要注意的是,Nginx 的配置文件可能因版本和系统的不同而有所差异,具体配置方式可以参考 Nginx 的官方文档或者其他相关资料。

猜你喜欢

转载自blog.csdn.net/weixin_45934622/article/details/130820119