【问题标题】:Reverse Proxy in Python using WSGI使用 WSGI 在 Python 中进行反向代理
【发布时间】:2015-05-13 09:14:26
【问题描述】:

应用程序,使用 Flask 构建。 我想要以下路由:

"/"     -> my Flask app
"/foo/" -> Reverse proxy toward http://bar/

到目前为止,我没有任何反向代理,所以我的应用程序看起来像:

import app
[...]
if __name__ == '__main__':
    app.app.secret_key = 'XXX'
    app.app.run(debug=True, use_reloader=False)

我希望整个项目只在 python 中。我不想要任何 Apache 或 nginx 堆栈(该项目不打算在公共网络上)。我看到我可以使用 Python WSGI 服务器,例如cherrypy 中的“wsgiserver”,所以我的应用程序是:

from cherrypy import wsgiserver
import app

d = wsgiserver.WSGIPathInfoDispatcher({
    '/': app.app.wsgi_app
})
server = wsgiserver.CherryPyWSGIServer(('0.0.0.0', 8080), d)

if __name__ == '__main__':
      server.start()

如果我想在“/foo”中添加反向代理,我想我只需要:

from cherrypy import wsgiserver
import app

d = wsgiserver.WSGIPathInfoDispatcher({
    '/': app.app.wsgi_app,
    '/foo/': SOME_WSGI_REVERSE_PROXY
})
server = wsgiserver.CherryPyWSGIServer(('0.0.0.0', 8080), d)

if __name__ == '__main__':
      server.start()

所以我的问题是:

  • 是否有任何反向代理,用 python 编写,符合 WSGI 标准? (不知道有没有SOME_WSGI_REVERSE_PROXY
  • 这种实现方式可以使用吗?

回答者:

正如接受的anwser所说,这是最终代码:

from cherrypy import wsgiserver
import wsgiproxy.app
import app
app = app.app.wsgi_app
proxy = wsgiproxy.app.WSGIProxyApp("http://bar/")
d = wsgiserver.WSGIPathInfoDispatcher({
    '/': app,
    '/foo/':proxy
})
server = wsgiserver.CherryPyWSGIServer(('0.0.0.0', 8080), d)

if __name__ == '__main__':
   try:
      server.start()
   except KeyboardInterrupt:
      server.stop()

【问题讨论】:

  • 请不要编辑问题以在其中包含答案。这就是答案部分的用途。您可以自己发布答案。

标签: python proxy wsgi reverse-proxy


【解决方案1】:

查看粘贴代理中间件。

【讨论】:

  • 链接好像失效了
【解决方案2】:

mitmproxy:mitmproxy.org 这是一个具有反向代理功能的python代理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 2011-02-04
    • 2014-09-23
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多