【问题标题】:reverse proxy mulitple ipython notebook servers反向代理多个 ipython 笔记本服务器
【发布时间】:2015-07-30 08:57:16
【问题描述】:

目前我们在 nginx 代理后面运行一个 Ipython 笔记本服务器。这很有效,因为它是一个简单的一对一映射。

现在我们要在 1 个代理后面运行多个笔记本服务器。由于这些服务器是动态添加的,因此代理也应该是动态的。

理想情况下,我想代理 url 子路径:

http://open.net/py1 -> http://secure1:8888
http://open.net/py2 -> http://secure2:8888
http://open.net/py3 -> http://secure3:8888
etc.

这种方法的问题是 Ipython 在它的 html 中不使用相对 url。摘录:

<script src="/static/.../promise.min.js"</script>
<script src="/static/.../require.js"</script>
<script> ...

所以在http://open.net/py2 内部require.js 将通过http://open.net/static/.../require.js 加载,这当然会导致502。它应该是http://open.net/py2/static/.../require.js

问题:解决这个问题的好策略是什么?

约束

  • 我无法触摸源 html
  • 我不能为每个 Ipython 服务器使用子域(因为它们是动态添加的)

【问题讨论】:

  • 你如何匹配/py3 应该代理到secure3
  • 我不知道。也许是一个正则表达式......要明确:现在不是那样,这只是一个假设。我想在子路径上代理,因为替代方案 (AFAIK) 正在动态添加子域,这很乏味 imo。
  • 您不需要每次都添加子域。只需添加通配符子域并让 nginx 监听任何子域。
  • 我之前与我们的开发人员讨论过这个问题。他们对通配符子域上的正则表达式路由(安全漏洞)有一种不好的感觉。但是,是的,就这样吧。发送!
  • 您可以通过在配置中设置 NotebookApp.base_url 来更改 IPython 笔记本服务器使用的基本 URL。 Jupyterhub 已经做了与此非常相似的事情 - 将多个独立笔记本用户暴露在单个代理后面。

标签: nginx ipython ipython-notebook reverse-proxy


【解决方案1】:

有什么好的策略来解决这个问题?

子域

我不能为每个 Ipython 服务器使用子域(因为它们是动态添加的)

不正确。

# this will only py<some-digits> subdomain.
server {
    listen 80;
    server_name ~^(?<sub>py\d+)\.example\.com$;
    # now you have $sub variable that contains subdomain
    # and could be used to choose what server you want to connect
    ...
}

# catch all server block that simple shows 404 for any request
server {
    listen 80 default_server;
    return 404;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    相关资源
    最近更新 更多