我在 DigitalOcean Ubuntu droplet 上有一个简单的 Python 服务器,它应该为 /dist 文件夹中的 index.html 文件提供服务:
port = 8000
os.chdir(os.path.join(os.path.dirname(__file__), 'dist'))
Handler = http.server.SimpleHTTPRequestHandler
httpd = socketserver.TCPServer(('', port), Handler)
print('Serving at port ', port)
httpd.serve_forever()
我没有在此机器上运行云防火墙。我运行了“sudo ufw allow 80/tcp”来打开防火墙,如果我运行 ufw status,它会显示端口 80 对所有人开放。我运行了“sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8000”将流量从端口 80 重定向到端口 8000。
如果我从另一台机器运行 nmap,则唯一开放的端口是 22 上的 ssh。端口 80 已被过滤。在浏览器中导航到主机会导致连接超时。尝试直接从端口 80 提供服务会产生相同的结果。如果我在本地尝试 nmap 或 netstat,端口显示打开,但服务器崩溃(对等方重置连接,没有其他有用的错误信息)。这可能是什么原因造成的?
答案1
事实证明我必须启用 DigitalOcean 防火墙并进行设置,否则它会阻止所有非 ssh 连接。
答案2
跑步
ufw 允许 8000/tcp
启用端口 8000。(如果要使用端口 80,请将 8000 替换为 80。)
如果这不起作用可能需要强制更改。(到目前为止还不需要使用这个。)
原因
即使没有配置外部防火墙,Ubuntu 也配置为只允许 ssh(可能还有其他端口,具体取决于您选择的基础映像)。