簡體   English   中英

在 AWS 上使用 Tornado 托管 Bokeh 服務器

[英]Hosting Bokeh Server with Tornado on AWS

在 AWS 上使用 Tornado 托管 Bokeh 服務器時,有什么可能的方法可以隱藏 Bokeh 服務器以防止公共 IP 訪問?

選項 1:在私有子網中運行 Bokeh,在公共子網中運行 Tornado。

您可以將 Bokeh 服務器放在 VPC 私有子網中,請參閱: http : //docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html這將確保它獲得私有 IP 地址但不會公開訪問. 如果您的 Bokeh 服務器需要 WAN 出口,您可以將NAT 實例放置在公共子網中,並將外部流量從您的私有子網路由到 NAT。

Tornado 將被放置在一個公共子網中,使其可公開訪問,並允許它通過專用網絡訪問 Bokeh。

選項 2:在私有子網中的同一實例上運行 Bokeh 和 Tornado。

負載均衡器放置在公共子網中,並使用負載均衡器公開 Tornado 但不公開 Bokeh。 如果您使用 2 個或更多 AZ 進行容錯,這將很有意義,但它也可以在單個 AZ 中實現您的目標。

選項 3:在公共子網中的同一實例上運行 Bokeh 和 Tornado。

使用ec2 安全組允許對 Tornado 端口的入站訪問,但不允許對 Bokeh 端口的訪問。 您仍然可以使用環回地址(本地主機:127.0.0.1)在本地訪問 Bokeh。

我認為您無法避免暴露 Bokeh 服務器。 一旦 Web 瀏覽器下載了由 autoload_server 生成的<script> ,它將嘗試根據<script>的 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_template 將生成一個完整的 HTML 網頁,並為散景圖添加一個<div>

<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 服務器以檢索<script>的正文,然后將執行腳本中的 js。 這會將您的 HTTP 連接升級到 WEBSOCKET,並將直接與內部 Bokeh 服務器通信以提供交互性。

不幸的是,這將失敗,因為托管 Web 服務器不會在localhost:5006上公開 Bokeh 服務器

我們需要的是一種為 Bokeh 服務器指定兩個主機/端口設置的方法,一個用於創建實際的內部 Bokeh 服務器(通常在localhost:5006 ),另一個用於將連接廣告為實際的真實主機地址和端口在它的<script>以及被檢索的<script>代碼中——這樣我們就可以讓我們自己托管的 HTTP 服務器在內部重定向這些調用,瀏覽器只直接與一台服務器對話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM