我有一个在本地运行的服务器(Arch Linux),上面有几个服务,我想添加一个在不同端口上运行的新 python 服务(Flask)。在本地,服务器正在 上运行192.168.x.x
,我已经可以访问当前在其上运行的所有服务。我在 port 上启动了 Flask 服务器5000
,但是在我的笔记本电脑上运行 nmap 显示该端口仍然关闭:
mylaptop~$ nmap 192.168.x.x
PORT STATE SERVICE
22/tcp open ssh
3000/tcp open ppp
5432/tcp open postgresql
但是,该端口在服务器的本地主机上打开
myserver~$ nmap localhost
PORT STATE SERVICE
22/tcp open ssh
3000/tcp open ppp
5000/tcp open upnp
5432/tcp open postgresql
我认为这是 iptables 的某种问题(我对此不太熟悉),但我尝试3000
在 port 上运行express.js 服务器(我已经在 port 上运行了一个)5000
,并且果然它有效。
mylaptop~$ nmap 192.168.x.x
PORT STATE SERVICE
22/tcp open ssh
3000/tcp open ppp
5000/tcp open upnp
5432/tcp open postgresql
我仍然不确定如何转发 Flask 服务器,而且我很好奇为什么我的 ssh、express.js 和 postgres 服务默认被转发。任何帮助表示赞赏!
答案1
假设您使用的是内置于 HTTP 服务器的 Flask,那么这将在烧瓶文档(向下滚动到外部可见服务器):
如果您运行该服务器,您会注意到该服务器只能从您自己的计算机访问,而不能从网络中的任何其他计算机访问。这是默认设置,因为在调试模式下,应用程序的用户可以在您的计算机上执行任意 Python 代码。
如果您禁用了调试器或信任网络上的用户,则只需在命令行中添加 --host=0.0.0.0 即可使服务器公开可用:
烧瓶运行--host=0.0.0.0
这告诉您的操作系统侦听所有公共 IP。
nmap
您计算机上的输出显示myserver
端口 5000 打开,因为您使用了nmap localhost
,它扫描本地主机上的打开端口,即 127.0.0.1,而不是 192.168.xx