Jupyter notebook 访问问题 Empty reply from server

环境背景

1. 在Window10上使用VirtualBox 安装了 Centos7 虚拟机,并且Jupyter安装在虚拟机中

2. 虚拟机和宿主机使用 VirtualBox的网络端口映射让 宿主机Window10 能够访问 虚拟机Centos7 的端口

3. 在宿主机Window10上 Google浏览器 访问 Jupyter NoteBook Server


现象描述

1. 在虚拟机内使用curl命令行访问 Jupyter 可以正常访问

(ai) [root@localhost runtime]# curl http://127.0.0.1:18881
[I 08:19:30.818 NotebookApp] 302 GET / (127.0.0.1) 0.690000ms

2. 在宿主机Windows10 Google 浏览器访问显示 ERR_EMPTY_RESPONSE ; 尝试在cmd中使用curl 访问,显示如下

C:\Users\Administrator>curl http://localhost:18881
curl: (52) Empty reply from server

原因分析

1. 防火墙端口没有打开

2. Jupyter开启的http server有权限控制


解决方案

1. 对于防火墙问题,只要打开防火墙的端口就好了,参考下面命令行。(我的环境中是firewalld服务,你的是iptables请自行搜索对应的命令)

firewall-cmd --zone=public --add-port=18881/tcp --permanent  #打开18881端口
firewall-cmd --reload   #刷新权限

2. Jupyter http Server 的问题,请执行下面的命令

jupyter notebook --generate-config    # 生成/root/.jupyter/jupyter_notebook_config.py

   然后修改生成的 jupyter_notebook_config.py 配置文件

c.NotebookApp.ip='*' #外部IP地址客户端可以访问

总结

   这个问题大概花了我2个多小时,算是蛮久的时间。第一个问题我很快就想到了,并且解决地很顺利;主要的时间都是花在了解决第二个步骤上,因为刚接触 Jupyter 所以对它的配置还不了解。考虑到很多刚接触的人跟我使用同样的环境(Windows宿主机 + VirtualBox虚拟机),所以极有可能遇到相同的问题,所以写了这篇博客,希望能够减少你解决问题所花的时间。

  第二个问题花这么长的时间主要是因为我搜索解决方案的关键字有问题,我搜的是 "Jupyter 浏览器无法访问" ,"Jupyter ERR_EMPTY_RESPONSE" 之类的。根本方向就错了,应该搜"远程jupyter notebook Server服务器搭建" ... 不过这类博客说的比较全,比如设置密码,SSL之类的,开放外部访问可能会不显眼,所以我还是搜到第二个博客才注意到这点。

 

  其实我在解决问题的过程中其实也早就想到是不是Jupyter server有权限控制,因为很明显 虚拟机内访问正常,宿主机访问返回空。我修改了配置文件里的很多东西(类似下面的配置),都没有成功。

c.JupyterApp.answer_yes = True
c.NotebookApp.allow_origin = '*'
c.NotebookApp.allow_remote_access = True 
c.NotebookApp.local_hostnames = ['localhost','127.0.0.1']
...

特别感谢

https://blog.csdn.net/halazi100/article/details/79703928

https://www.cnblogs.com/thousfeet/p/10647102.html


如果你跟我的环境类似,并且尝试使用我上面的方法还是不行,欢迎留言 ^^。

如果你发现博客中有错误,欢迎留言 ^^。

如果你觉得这篇博客帮助到了你,欢迎留言 ^^。

你可能感兴趣的:(Machine,Learning,机器学习)