VPS上启动Django网站后无法访问,求问题排查思路
排查Django服务器启动正常但无法访问的问题
嘿,我来帮你梳理下可能导致这个问题的几个常见原因,咱们一个个排查:
防火墙/安全组拦截端口
这是最常见的问题!你指定的8000端口可能被服务器本地防火墙或者云服务商的安全组挡住了:- 如果是Linux服务器,用
ufw status查看防火墙规则,确认8000端口的入站请求被允许;如果用iptables,需要添加允许8000端口的规则。 - 如果是云服务器(比如AWS、阿里云),一定要去控制台的安全组配置里,添加入站规则,允许TCP协议的8000端口访问。
- 如果是Linux服务器,用
Django的ALLOWED_HOSTS配置错误
Django有严格的主机验证机制,你必须把访问用的域名或服务器IP加入到项目settings.py的ALLOWED_HOSTS列表中:# settings.py 示例配置 ALLOWED_HOSTS = ['my_domain.com', '你的服务器公网IP']测试阶段可以临时设为
ALLOWED_HOSTS = ['*'](但生产环境绝对不能这么做,会有安全风险),修改配置后记得重启Django服务器。域名解析未生效
当你用my_domain.com:8000访问时,要确保域名已经正确解析到服务器的公网IP:- 在本地终端执行
ping my_domain.com,查看返回的IP是否和服务器公网IP一致。如果不一致,需要去域名服务商的DNS管理后台,修改A记录指向正确的服务器IP,解析生效可能需要几分钟到几小时。
- 在本地终端执行
服务器网络绑定异常
虽然你用了0.0.0.0:8000启动(理论上绑定所有网卡),但还是可以检查下实际监听情况:- 在服务器上执行
netstat -tuln | grep 8000,确认输出里的监听地址是0.0.0.0:8000,而不是127.0.0.1:8000(后者只能本地访问)。
- 在服务器上执行
客户端网络限制
有时候问题出在你本地的网络环境:- 先尝试直接用服务器公网IP+8000端口访问,如果能打开,说明是域名相关的问题;如果也不行,再回到服务器端排查防火墙和配置。
- 部分公司内网或公共网络会屏蔽非标准端口(8000不属于常用的80/443端口),可以试试换个端口启动(比如
python3.4 manage.py runserver 0.0.0.0:8001),或者配置Nginx反向代理将80端口转发到8000。
内容的提问来源于stack exchange,提问作者Sergei Petrov




