Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在AWS上使用Tornado托管Bokeh服务器_Python_Amazon Web Services_Amazon Ec2_Tornado_Bokeh - Fatal编程技术网

Python 在AWS上使用Tornado托管Bokeh服务器

Python 在AWS上使用Tornado托管Bokeh服务器,python,amazon-web-services,amazon-ec2,tornado,bokeh,Python,Amazon Web Services,Amazon Ec2,Tornado,Bokeh,在AWS上使用Tornado托管Bokeh服务器时,有什么可能的方法可以隐藏Bokeh服务器,使其不受公共IP访问?选项1:在私有子网中运行Bokeh,在公共子网中运行Tornado 您可以将Bokeh服务器放置在VPC专用子网中,请参阅: 这将确保它获得一个私有IP地址,但不会公开访问。如果您的Bokeh服务器需要WAN出口,您可以在公共子网中放置一个WAN出口,并从您的私有子网连接到NAT Tornado将被放置在一个公共子网中,使其可以公开访问,并通过专用网络访问Bokeh 选项2:在私有

在AWS上使用Tornado托管Bokeh服务器时,有什么可能的方法可以隐藏Bokeh服务器,使其不受公共IP访问?

选项1:在私有子网中运行Bokeh,在公共子网中运行Tornado

您可以将Bokeh服务器放置在VPC专用子网中,请参阅: 这将确保它获得一个私有IP地址,但不会公开访问。如果您的Bokeh服务器需要WAN出口,您可以在公共子网中放置一个WAN出口,并从您的私有子网连接到NAT

Tornado将被放置在一个公共子网中,使其可以公开访问,并通过专用网络访问Bokeh

选项2:在私有子网中的同一实例上运行Bokeh和Tornado

将a放置在公共子网中,并使用负载平衡器公开Tornado,但不公开Bokeh。如果您使用2个或更多AZ进行容错,这将非常有意义,但它也可以在单个AZ中实现您的目标

选项3:在公共子网中的同一实例上运行Bokeh和Tornado


使用允许入站访问Tornado港口,但不允许访问Bokeh港口。您仍然可以使用环回地址(localhost:127.0.0.1)在本地访问Bokeh

我认为您无法避免暴露Bokeh服务器。一旦web浏览器下载了autoload_服务器生成的
,它将尝试根据
中的URL直接连接到Bokeh服务器实例。然后,此连接形成用于Bokeh交互的WebSocket

例如:

# Start a Bokeh App for your interactive Graph
chart_app = Application(FunctionHandler(charts.chart_code))
server = Server({"/chart_app": chart_app}, address="localhost" port=5006, allow_websocket_origin=["localhost:80"])

# Handle a call to /chart
@app.route('/chart', methods=['GET'])
def chart_func():
    script = autoload_server(model=None, url='http://localhost:5006/chart_app')
    return render_template("embed_bootstrap.html", script=script)
render_模板将生成完整的HTML网页,并为Bokeh图表添加

<script
    src="http://localhost:5006/chart_app/autoload.js?bokeh-autoload-element=5eaa53a8-3336-40b1-8d29-f48457410a18&bokeh-app-path=/chart_app&bokeh-absolute-url=http://localhost:5006/chart_app"
    id="5eaa53a8-3336-40b1-8d29-f48457410a18"
    data-bokeh-model-id=""
    data-bokeh-doc-id=""
></script>
    </div>
</div>

您的浏览器现在将尝试直接连接到Bokeh服务器以检索
的主体,然后在脚本中执行js。这将把您的HTTP连接升级到WEBSOCKET,并将直接与内部Bokeh服务器通信以提供交互性

不幸的是,这将失败,因为托管web服务器不会在
localhost:5006


我们需要的是为Bokeh服务器指定两个主机/端口设置的方法,一个用于创建实际的内部Bokeh服务器(通常在
localhost:5006
上),另一个用于在其
和检索到的
代码中将连接作为实际主机地址和端口进行广告-这样我们就可以让我们自己的托管HTTP服务器在内部重定向这些调用,浏览器只会直接与一台服务器对话。

嗨@Dave,我查看了链接。这是否意味着Bokeh服务器和Tornado服务器必须在两个不同的实例上运行?我正在尝试的当前实现在同一个实例上运行,但在不同的端口上。@ansh.gandhi:您希望tornado服务可以公开访问吗?是的。目前,Bokeh服务器和Tornado都可以公开访问。我在bokeh服务器上允许Websocket来源,以便Tornado可以访问它。但是,我想知道是否有可能让Tornado服务器面向公众,而Bokeh位于同一实例的私有网络上,并且仍然工作?我刚刚接触AWS。@ansh.gandhi:为您添加了一些附加选项#3号可能非常适合你。请查看AWS文档中的VPC安全组。这将允许您只允许入站流量Tornado,而不允许Bokeh,同时该实例仍然可以公开寻址。感谢您提供的替代方案。我尝试使用选项3已经有一段时间了,但是存在一些访问问题。更高级别的视图是这样的:用户->Tornado[用户在这里选择一个数据集,Tornado启动一个Bokeh服务器]->(错误:我无法使用本地主机从Tornado访问Bokeh服务器,我已经专门输入了公共IP地址)。你认为有解决办法吗?