我有一个服务可以像这样旋转Bokeh服务器实例:
server = Server({"/": app}, io_loop=loop, port=port,
allow_websocket_origin=['localhost:%d'%port, origin, self.request.host])
此服务在代理(nbserverproxy)后面运行,以便客户端只能通过localhost:<port>/<path>
访问example.com/proxy/<port>/<path>
我正在尝试返回一个脚本标记,该标记将加载我的散景应用,确保从example.com/proxy/<port>/<path>
目前我生成这样的标签:
script = """<script
src="{protocol}://{origin}{prefix}autoload.js?bokeh-autoload-element={ele_id}&bokeh-absolute-url={protocol}://{origin}&bokeh-app-path={prefix}"
id="{ele_id}"
data-bokeh-model-id=""
data-bokeh-doc-id=""
></script>""".format(protocol=protocol, origin=origin, prefix=prefix, ele_id=ele_id)
(对于在端口45740上运行的散景渲染类似于:
<script
src="https://example.com/proxy/45740/autoload.js?bokeh-autoload-element=0535b6ca-6af2-4fcf-aa51-66d642fd3b08&bokeh-absolute-url=http://localhost:8888&bokeh-app-path=/proxy/45740/"
id="0535b6ca-6af2-4fcf-aa51-66d642fd3b08"
data-bokeh-model-id=""
data-bokeh-doc-id=""
></script>
这个标签会在这个JS中正确地返回一些Javascript,它会尝试在以下位置加载JS / CSS资源:
https://example.com/static/js/bokeh.min.js
而不是
https://example.com/proxy/45740/static/js/bokeh.min.js
我无法想办法告诉散景它在代理后面,以便所有路径都开始&#39; / proxy / 45740 /&#39;从客户的角度来看。
我尝试使用prefix
arg启动服务器,如:
Server({"/": app}, prefix="/proxy/%s"%port, io_loop=loop, port=port, allow_websocket_origin=['localhost:%d'%port, origin, self.request.host])
这不起作用,因为代理在到达散景服务器之前删除/proxy/<port>
前缀,因此不会将其传递给散景服务器,散景服务器会提供404,因为它需要所有前缀它的路径。
任何解决方案?
答案 0 :(得分:1)
这是prefix
的预期目的,nbserverproxy
的自动行为似乎很不幸。
一种可能的解决方案可能是让您的代理直接提供BokehJS资源,而不是让Bokeh服务器执行此操作。许多代理都针对提供静态资源进行了优化,这也减少了Bokeh服务器上的负载,这可能与您的情况相关。
我对nbserverproxy
一无所知,但您可以看到demo.bokehplots.com
网站如何使用nginx:
https://github.com/bokeh/demo.bokehplots.com
要点是:将BokehJS文件复制到某个本地目录,并将代理配置为以https://example.com/static/