Ubuntu主机Nginx服务80端口外部无法访问,Docker容器可正常访问
解决Ubuntu主机切换Docker Nginx与本地Nginx后外部无法访问本地Nginx的问题
清理Docker残留的iptables规则
Docker启动容器时会自动修改iptables规则,停止容器后部分规则可能残留,拦截主机80端口的外部流量:- 查看当前iptables规则:
sudo iptables -L -n - 若发现DOCKER相关链存在未清理的规则,重启Docker服务清除:
sudo systemctl restart docker - 也可手动清理Docker相关链:
sudo iptables -F DOCKERsudo iptables -F DOCKER-USER
- 查看当前iptables规则:
确认本地Nginx的监听地址
本地Nginx可能仅监听回环地址(127.0.0.1),导致外部无法访问:- 打开Nginx配置文件(如
/etc/nginx/sites-available/default或/etc/nginx/nginx.conf),检查listen指令,确保为:listen 80;或listen 0.0.0.0:80;
避免设置为listen 127.0.0.1:80; - 修改后重启Nginx服务:
sudo service nginx restart - 用
ss命令验证监听状态:ss -tulpn | grep nginx
输出应包含0.0.0.0:80或:::80(IPv6)
- 打开Nginx配置文件(如
检查UFW防火墙规则
Ubuntu默认的UFW防火墙可能未允许外部访问80端口,或Docker修改了防火墙规则:- 查看UFW当前规则:
sudo ufw status - 若80/tcp未被允许,添加规则:
sudo ufw allow 80/tcp - 重载UFW使规则生效:
sudo ufw reload
- 查看UFW当前规则:
验证网络路由与端口状态
在外部主机重新执行nmap扫描,确认80端口状态:nmap -p 80 <主机IP>
若仍显示filtered,可临时关闭UFW测试:sudo ufw disable
如果关闭后能访问,说明是UFW规则问题,重新调整规则后开启UFW即可。
内容的提问来源于stack exchange,提问作者Hoon Lee
相关产品推荐
相关产品推荐

