最近做一些工作涉及到了flask的使用,写了一个简单的程序后,自己的云服务器公网IP一直无法访问,解决这个问题费了我好长时间。
我自己用的是阿里云服务器,系统是centos
我在网上找到了几种说法:
有人说是端口的问题
网上最多的说法是自己访问的端口号没开,flask默认访问的是5000端口,之前我已经在安全组打开了5000端口,但测试的公网IP仍然无法访问
![image-20200422234448652](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL1NKY3VuL1BpY3R1cmUvbWFzdGVyL2ltZ19uZXcvaW1hZ2UtMjAyMDA0MjIyMzQ0NDg2NTIucG5n?x-oss-process=image/format,png)
host设定
flask官方文档给出了一个说明,自己的服务器只能使用自己的电脑访问,如果需要将服务器公开,需要设置host为0.0.0.0
![image-20200422235031728](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL1NKY3VuL1BpY3R1cmUvbWFzdGVyL2ltZ19uZXcvaW1hZ2UtMjAyMDA0MjIyMzUwMzE3MjgucG5n?x-oss-process=image/format,png)
这一步我也试了,但是公网IP还是无法访问
防火墙
防火墙的问题我最早考虑到了,我也指定了5000
端口可以通过防火墙。结果今天才发现自己的设置没有成功,5000
端口没有被放行
后来我看到防火墙通过的端口有一个8888
端口,这个端口是被我闲置的,就换上了它
![image-20200423095157884](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL1NKY3VuL1BpY3R1cmUvbWFzdGVyL2ltZ19uZXcvaW1hZ2UtMjAyMDA0MjMwOTUxNTc4ODQucG5n?x-oss-process=image/format,png)
测试成功了
![image-20200422235557768](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL1NKY3VuL1BpY3R1cmUvbWFzdGVyL2ltZ19uZXcvaW1hZ2UtMjAyMDA0MjIyMzU1NTc3NjgucG5n?x-oss-process=image/format,png)
附上有关防火墙的一些命令:
systemctl start firewalld.service(开启防火墙)
service firewalld restart(重启防火墙)
firewall-cmd --zone=public --add-port=4400-4600/udp --permanen(指定端口范围为4400-4600通过防火墙)
firewall-cmd --zone=public --list-ports(查看通过的端口)
测试使用的flask程序如下:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "hello world !!!"
if __name__ == '__main__':
app.run(host="0.0.0.0", port=8888)