2017-01-19 76 views

回答

1

選項1:在專用子網和公共子網中運行Tornado。

您可以將您的Bokeh服務器放置在VPC私有子網中,請參閱: http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html這將確保它獲取私有IP地址,但不會公開訪問。如果您的Bokeh服務器需要WAN出口,您可以將NAT instance置於公有子網中,將route external traffic置於您的私有子網的NAT中。

龍捲風將被放置在公共子網中,使其可以公開訪問,並通過專用網絡訪問Bokeh。

選項2:在專用子網中的相同實例上運行Bokeh和Tornado。

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

選項3:在公共子網中的相同實例上運行散景和龍捲風。

使用ec2 security group可允許對Tornado端口進行入站訪問,但不允許對Bokeh端口進行入站訪問。您仍然可以使用環回地址(localhost:127.0.0.1)在本地訪問Bokeh。

+0

嗨@Dave,我看着鏈接。這是否意味着Bokeh Server和Tornado服務器將不得不在兩個不同的實例上運行?我正在嘗試的當前實現已在相同的實例上運行,但在不同的端口上運行。 –

+0

@ ansh.gandhi:你想讓龍捲風服務公開嗎? –

+0

是的。目前,Bokeh Server和Tornado都可以公開訪問。我允許在散景服務器上使用Websocket Origin,以便Tornado可以訪問它。但是,我想知道是否有可能讓Tornado服務器面向公衆並且Bokeh在同一個實例上的專用網絡上並仍然有效? 我只是AWS的新手。 –

0

我不認爲你可以避免暴露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 Server檢索<script>的主體,然後在腳本中執行js。這將升級您的HTTP連接到一個WEBSOCKET,並將直接與內部Bokeh服務器通信以提供交互性。

不幸的是,這將失敗作爲託管網絡服務器不會暴露在localhost:5006

我們需要的是指定的背景虛化的服務器,一個使用它來創建兩個主機/端口設置的方式散景服務器實際的內部散景服務器(通常在localhost:5006),另一個用於宣傳連接作爲其<script>中的實際主機地址和端口以及檢索到的<script>代碼 - 這樣我們可以讓我們自己的託管HTTP服務器內部重定向這些調用,瀏覽器只能直接與一臺服務器通信。