Flask解决5000端口远程访问的问题
 doctorrm      2019-03-16 22:06:46      166      0      

我们都知道运行Flask项目需要下面两个命令:


$ export FLASK_APP=hello.py
$ flask run 
* Running on http://127.0.0.1:5000/

但是我在远程访问时,Flask 5000端口远程显示访问失败,
找了好久,说是将防火墙将端口打开后就可以了。但是用http://ip:5000 访问后还是显示502 unable to handle。

最后发现是因为内网地址的问题,需要在启动程序的时候将内网地址从127.0.0.1改为0.0.0.0。即将
flask run改为flask run --host=0.0.0.0

官网也有说明,怪我没仔细看:

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.

另有一个更简单的方法,如果在python代码中有以下代码,也可以实现相同功能:

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

然后再用nohup命令在后台运行python文件: nohup python hello.py >my.log &

附上centos7中的防火墙firewalld相关命令:

Centos升级到7之后,内置的防火墙已经从iptables变成了firewalld。所以,端口的开启还是要从两种情况来说明的,即iptables和firewalld。下面我们只介绍firewalld的情况,iptables可以看最后的参考链接。Centos7默认安装了firewalld,如果没有安装的话,可以使用 yum install firewalld firewalld-config进行安装。

1.启动防火墙
systemctl start firewalld

2.禁用防火墙
systemctl stop firewalld

3.设置开机启动
systemctl enable firewalld

4.停止并禁用开机启动
sytemctl disable firewalld

5.重启防火墙
firewall-cmd --reload

6.查看状态
systemctl status firewalld或者 firewall-cmd --state

7.查看版本
firewall-cmd --version

8.查看帮助
firewall-cmd --help

9.查看区域信息
firewall-cmd --get-active-zones

10.查看指定接口所属区域信息
firewall-cmd --get-zone-of-interface=eth0

11.拒绝所有包
firewall-cmd --panic-on

12.取消拒绝状态
firewall-cmd --panic-off

13.查看是否拒绝
firewall-cmd --query-panic

14.将接口添加到区域(默认接口都在public)
firewall-cmd --zone=public --add-interface=eth0(永久生效再加上 –permanent 然后reload防火墙)

15.设置默认接口区域
firewall-cmd --set-default-zone=public(立即生效,无需重启)

16.更新防火墙规则
firewall-cmd --reload或firewall-cmd --complete-reload(两者的区别就是第一个无需断开连接,就是firewalld特性之一动态
添加规则,第二个需要断开连接,类似重启服务)

17.查看指定区域所有打开的端口
firewall-cmd --zone=public --list-ports

18.在指定区域打开端口(记得重启防火墙)
firewall-cmd --zone=public --add-port=80/tcp(永久生效再加上 –permanent)

说明:
–zone 作用域
–add-port=8080/tcp 添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效

参考:

https://cuyu.github.io/python/2016/07/13/%E5%B0%8F%E5%9D%91-Flask-server%E4%B8%8D%E8%83%BD%E8%AE%BF%E9%97%AE

https://blog.csdn.net/u011846257/article/details/54707864

去打赏

您的支持将鼓励我们继续创作!

[微信] 扫描二维码打赏

[支付宝] 扫描二维码打赏

正在跳转到PayPal...

发表评论