允许公众访问服务器端口的内容

允许公众访问服务器端口的内容

我有一个实时的、自动更新的 python 绘图(使用 Bokeh),显示在远程 Linux 服务器(由我的大学为我设置)的端口 127.0.0.1:5006 上。通常,我必须通过 SSH 连接到服务器,并为该地址启用端口转发,才能在本地计算机中查看绘图。我的问题是,我需要做什么,以便如果我告诉任何人我的服务器的 IP 地址(比方说 123.12.12.123)和要查找的端口,他们可以看到绘图而不会出现 SSH 问题?这有可能吗?

更新:实现细节所需的代码。由于它需要两个文件来读取绘图数据,因此我将它们包括在内这里

''' 
Use the ``bokeh serve`` command to run the example by executing: bokeh serve sliders.py
at your command prompt. Then navigate to the URL-http://localhost:5006/sliders
in your browser.
'''

from bokeh.io import curdoc
from bokeh.layouts import column, row
from bokeh.models import Button, ColumnDataSource
from bokeh.plotting import figure

# Callbacks
def update_data():
   print("reading new data")
   df1 = read_pickle('weeklydata2.pkl')
   source.data = ColumnDataSource.from_df(df1)

# Set up data
df =read_pickle('weeklydata1.pkl')
f = dict(OAT='green', SAT='orange', OAH='red')
source = ColumnDataSource(df)

# Set up plot
p = figure(x_axis_type="datetime")

for i in df.columns:
   p.line('index',
          i,
          source=source,
          legend_label=i,
          line_color=f[i])
   p.circle('index',
            i,
            source=source,
            size=10,
            color=f[i])

# Set up widgets
button = Button(label='Refresh Plot')
button.on_click(update_data)
inputs = column(button)

curdoc().add_root(row(inputs, p, width=800))
curdoc().title = "Time Series of Temp., Setpoint and Humidity Variables"

这会生成输出

2019-11-26 10:53:19,916 启动 Bokeh 服务器版本 1.4.0(在 Tornado 6.0.3 上运行)

2019-11-26 10:53:19,918 未提供用户身份验证挂钩(默认用户启用)

2019-11-26 10:53:19,921 Bokeh 应用程序运行于:http://localhost:5006/datashow

2019-11-26 10:53:19,921 启动 Bokeh 服务器,进程 ID:7116

2019-11-26 10:53:23,385 WebSocket 连接打开

2019-11-26 10:53:23,385 服务器连接已创建

读取新数据

读取新数据

2019-11-26 10:54:41,574 WebSocket 连接关闭:代码=1001,原因=无

中断、关闭

我想让服务器在上述端口上运行,这样任何人都只能看到实时的情节,并且可以选择更新它(如果他们愿意)。在这里,更新仅在我提供硬编码的静态数据源时有效。但我想你明白我的意思了吧?

答案1

只有有了这些信息,实现您想要的目标的唯一方法就是使用 iptables 规则,该规则会将所有与您不同的 MAC 地址重定向到所需的端口。例如这样的事情:

iptables -t nat -A PREROUTING -p tcp --dport 22 -m mac ! --mac-source 11:22:33:44:55:66 -j DNAT --to 123.12.12.123:5006

答案2

  • 侦听端口 5006 的应用程序应绑定到 0.0.0.0 而不是 127.0.0.1(除非它已经绑定并且限制是由防火墙引起的)
  • 应允许到端口 5006 的流量(通过服务器自己的防火墙和/或附近的路由器),或者您可以重新配置应用程序以侦听某些允许的端口(80、443...)。

相关内容