VPS通过Nginx反代Jupyter Lab出现跨域API拦截如何修复?
W 2021-09-08 07:44:04.737 LabApp] Blocking Cross Origin API request for /lab/api/workspaces/default. Origin: http://jupyter.kiwiheretic.xyz, Host: localhost
该报错是因为Nginx转发请求时给Jupyter传递的Host头值为localhost,和请求实际的来源Origin: http://jupyter.kiwiheretic.xyz不匹配,触发了Jupyter的跨域校验规则;你修改配置后未生效大概率是使用了错误的配置参数名,或是参数不全。
步骤1:修正Nginx转发配置
将你现有Nginx配置中location /块下的proxy_set_header Host localhost;改为:
proxy_set_header Host $host;
修改后执行sudo nginx -t验证配置语法正确,再执行sudo systemctl restart nginx重启Nginx生效。
步骤2:修正Jupyter Lab配置
打开~/.jupyter/jupyter_notebook_config.py,替换原有跨域相关配置为以下内容:
- 如果你使用的是Jupyter Lab 3.x及以上版本:
c.ServerApp.allow_origin = '*' c.ServerApp.allow_credentials = True c.ServerApp.trust_xheaders = True
- 如果你使用的是Jupyter Lab 2.x及以下旧版本:
c.NotebookApp.allow_origin = '*' c.NotebookApp.allow_credentials = True c.NotebookApp.trust_xheaders = True
注意:如果配置文件中对应参数前有
#注释符,需要先删除注释符配置才会生效。
步骤3:重启Jupyter Lab服务
关闭现有运行的Jupyter Lab进程,重新执行启动命令即可:
jupyter lab --no-browser
如果不想修改配置文件,也可以直接在启动时附加参数生效:
jupyter lab --no-browser --ServerApp.allow_origin='*' --ServerApp.trust_xheaders=True
如果修改后仍报错,可在Jupyter Lab启动日志中确认加载的配置文件路径,确认你修改的配置文件和实际加载的是同一个,避免虚拟环境/多用户环境下配置文件路径不匹配的问题。
内容的提问来源于stack exchange,提问作者Kiwiheretic

