如何用 Flask 反向代理服务器内部不同端口的监控页面/数据

2014-12-30 21:58:37 +08:00
 awanabe

服务器中跑的主程序是Flask(其他也可以)

现在我想这样做:
开Redis的监控页面 / UWSGI的监控 / Celery的监控
这些监控都会启动一个本地端口. 比如Celery的Flower, 127.0.0.1:5555 访问.
作为服务器是不会开放 IP/域名+端口 直接外部访问, 而且也没有权限控制, 这样很不安全.

我的想法是, 通过跑的主程序的后台, 反代这样的监控页面.
管理员->主程序后台->监控页面
这样进入的用户就可以做权限控制, 而且可以通过后台直接访问监控数据

我google了半天, 也没有一个解决方案, 就大家抛点思路给我...

6518 次点击
所在节点    Python
12 条回复
1989922yan
2014-12-30 23:45:13 +08:00
可能你想要的是这个: http://www.infoq.com/cn/articles/apache-shiro

看那边的老大在搞这个,我不确定nginx有没有
但是java应该有
python的话,还需要调研一下
awanabe
2014-12-31 08:01:00 +08:00
@1989922yan nginx 就走不了应用服务器了,还是想从应用服务器里面反代
neoblackcap
2014-12-31 09:19:10 +08:00
自己写一个反向代理就可以了,这个东西有什么难度吗?
9hills
2014-12-31 09:20:06 +08:00
flask反代只需要3行。。
est
2014-12-31 09:24:53 +08:00
@9hills 赌10块钱你这个三行反代是把response全部读取到内存然后write到返回里。

遇到同时100个请求100G的页面,你服务器内存就爆了。
9hills
2014-12-31 09:45:45 +08:00
@est 看用户需求呗,另外直接套框都行。用户如果只是做个内部系统,搞那些干嘛。

另外这些监控页面有100g?
est
2014-12-31 10:02:00 +08:00
@9hills 只是个极端例子。。。。。。。。。最近read到ring3然后write回去的代码看得有点多。有点反感。
9hills
2014-12-31 10:43:40 +08:00
@est 需求决定一切<_<,看了下我以前的代码,可以流式搞:

req = requests.get(base_url + '/' + url, params=request.args, stream=True)
return Response(stream_with_context(req.iter_content()), content_type=req.headers['content-type'])
est
2014-12-31 11:17:46 +08:00
@9hills 依然有用户层的复制。当我知道内核可以直接splice()之后就不能忍这种行为,再也回不去了。。。
awanabe
2014-12-31 12:21:34 +08:00
@9hills
@est
遇到相对路径跳转死翘翘...
9hills
2014-12-31 13:04:16 +08:00
@awanabe 嗯,我那个是API转发,所以没有跳转还好点
est
2014-12-31 14:50:54 +08:00
@awanabe 那这个就更加无解了。。。css里可以写 url(a.jpg) 。你得搞个支持css的7层的转发

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/158029

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX