V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
awanabe
V2EX  ›  Python

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

  •  
  •   awanabe · 2014-12-30 21:58:37 +08:00 · 6542 次点击
    这是一个创建于 3646 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    12 条回复    2014-12-31 14:50:54 +08:00
    1989922yan
        1
    1989922yan  
       2014-12-30 23:45:13 +08:00
    可能你想要的是这个: http://www.infoq.com/cn/articles/apache-shiro

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

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

    另外这些监控页面有100g?
    est
        7
    est  
       2014-12-31 10:02:00 +08:00
    @9hills 只是个极端例子。。。。。。。。。最近read到ring3然后write回去的代码看得有点多。有点反感。
    9hills
        8
    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
        9
    est  
       2014-12-31 11:17:46 +08:00
    @9hills 依然有用户层的复制。当我知道内核可以直接splice()之后就不能忍这种行为,再也回不去了。。。
    awanabe
        10
    awanabe  
    OP
       2014-12-31 12:21:34 +08:00
    @9hills
    @est
    遇到相对路径跳转死翘翘...
    9hills
        11
    9hills  
       2014-12-31 13:04:16 +08:00
    @awanabe 嗯,我那个是API转发,所以没有跳转还好点
    est
        12
    est  
       2014-12-31 14:50:54 +08:00
    @awanabe 那这个就更加无解了。。。css里可以写 url(a.jpg) 。你得搞个支持css的7层的转发
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1189 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:04 · PVG 02:04 · LAX 10:04 · JFK 13:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.