一、背景
公司AI产品部署了Jupyter服务,url为 http://192.168.2.25:9999,实际的使用是将页面嵌入到产品服务,但是存在安全隐患,知道Jupyter的端口,即使不通过产品跳转,也能访问到
二、解决方式
开启防火墙,隐藏9999端口,通过nginx代理,产品配置nginx信息即可,具体配置如下。
nginx.conf
location /jupyter {
proxy_pass http://127.0.0.1:9999;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
}
jupyter_lab_config.py
c.NotebookApp.base_url = '/jupyter'
c.NotebookApp.base_url 配置项作用
设置基础 URL 路径:c.NotebookApp.base_url 用于指定 Jupyter Notebook 服务器的基础路径。例如,如果你设置了 c.NotebookApp.base_url = '/jupyter',那么所有的 Jupyter Notebook URL 都会以 /jupyter 开头,比如 http://localhost:8888/jupyter。
反向代理使用:当你将 Jupyter Notebook 服务器放在反向代理(如 Nginx 或 Apache)后面时,反向代理服务器可能会将所有请求路由到特定的路径。例如,你可以将 Jupyter Notebook 配置为在 /jupyter 路径下运行,这样就可以将其和其他应用程序(如网站或其他服务)放在同一域名下。
测试发现,只有通过访问 http://192.168.2.94:9999/jupyter 才可以访问。既然通过修改base_url
可以隐藏实际资源路径,其实完全用不着nginx,可以将basr_url
的值设置复杂一点或者加密即可。