如何让本地部署的Django应用通过WAN访问
解决Django应用外部无法访问的建议
确保Django服务器绑定到所有网卡
默认runserver仅监听127.0.0.1,仅限本地访问。启动服务器时需绑定0.0.0.0,命令如下:python manage.py runserver 0.0.0.0:8000这样服务器会监听所有可用网卡,允许外部设备通过内网或公网IP访问。
检查本地防火墙规则
本地机器的防火墙(Windows Defender防火墙、Linux的ufw/iptables、macOS防火墙)可能拦截8000端口的入站请求。需手动添加规则,允许TCP协议的8000端口入站连接。验证路由器端口转发配置
- 确认转发的目标IP是本地机器的静态内网IP(避免DHCP自动分配导致IP变动),可在路由器后台绑定MAC地址到固定IP;
- 确保转发协议为TCP(Django HTTP服务依赖TCP),部分路由器默认选UDP,需修改;
- 测试端口转发是否生效,可在本地用自身WAN IP+8000访问验证。
修正Django的
ALLOWED_HOSTS设置
在settings.py中添加你的WAN IP或通配符*(仅开发测试环境使用),否则Django会拒绝非允许的主机请求:ALLOWED_HOSTS = ['你的公网WAN IP', '0.0.0.0', 'localhost'] # 开发环境临时简化:ALLOWED_HOSTS = ['*']排查公网IP类型(CGNAT问题)
部分ISP会分配共享公网IP(CGNAT),此时直接用WAN IP无法被外部访问。可通过以下方式确认:- 本地访问
ifconfig.me(Linux/macOS)或浏览器搜索“我的IP”,对比路由器后台显示的WAN IP; - 若不一致,说明是CGNAT,可使用内网穿透工具(如ngrok),运行
ngrok http 8000后将生成的临时域名提供给合作伙伴。
- 本地访问
测试端口可达性与网络限制
- 本地用自身WAN IP+8000访问,若无法访问,问题出在本地防火墙或Django配置;
- 若本地可访问但合作伙伴不行,可能是对方网络的防火墙/ISP封锁了8000端口,可尝试更换端口(如80、443,需同步开放路由器和本地防火墙对应端口)。
内容的提问来源于stack exchange,提问作者Chup91
相关产品推荐
相关产品推荐

