Pycharm 远程启动 Django 项目不能访问

操作步骤

今天用 Pycharm 远程创建一个 Django 项目。Pycharm 远程启动 Django 项目不能访问
创建成功后 Pycharm 会自动为其生成 Configuration ,因此我没有自己去配置。点击运行按钮,测试 Django 能否正常启动。
Pycharm 远程启动 Django 项目不能访问

结果是,项目正常启动(Pycharm 没有报错),但打开浏览器访问 http://192.168.20.133:8000 ,不能得到正常页面
Pycharm 远程启动 Django 项目不能访问

问题排查

首先,由于我的 Pycharm 能够正常连接远程 Python 解释器,说明本机与远程机通信正常。

继而我想,是不是 Pycharm 启动远程 Django 项目出了问题。所以我做了以下步骤:

  1. 检查防火墙是否开启:firewall-cmd --state(centos7 环境)。返回 running,防火墙果然开着,为快速定位问题,我选择直接把防火墙关掉:systemctl stop firewalld.service。但是仍不能正常访问页面。
  2. 检查 8000 端口是否被监听。如果 Django 正常启动,那么远程机上的 8000 端口一定是被监听着的。命令:netstat -nlp|grep 8000Pycharm 远程启动 Django 项目不能访问结果发现 8000 端口被 Python 的进程监听着,那么说明没啥问题。所以决定直接在远程机*问 url:http://192.168.20.133:8000/。
  3. linux 终端访问 url 可用 curl,即:curl http://127.0.0.1:8000
    Pycharm 远程启动 Django 项目不能访问
    返回内容显示,Django 的确跑起来了,而且是正常的跑起来了。只不过本机访问不了。
  4. 我突然灵机一动,想到“在远程机上,用远程机的 IP 访问页面可以吗?”Pycharm 远程启动 Django 项目不能访问
    结果是:不行。于是我抱着试一试的心态,把 Django 自动生成的 Configuration 修改了,增加了 Host 的内容,为 0.0.0.0,如下图这样。Pycharm 远程启动 Django 项目不能访问
  5. 选择 apply,点击 ok。通过浏览器访问页面正常,远程机上 curl http:192.168.20.133 访问正常。

结论

虽然不知道这之间原理,但基本可以得出一个结论:127.0.0.1!=0.0.0.0127.0.0.1 != 0.0.0.0。严格地说,应该是在某种情况下不完全相等。