最简单的反向代理

时间:2013-06-14 11:27:33

标签: python ruby node.js reverse-proxy

我正在寻找一种简单地在本地设置连接到远程站点的代理的方法。我不想在系统中安装任何东西。如果我可以用一个命令行调用来调用它,而不是甚至只用一个配置文件,那就太棒了。

目的是嗅探我正在开发的本地应用程序和其他人提供的远程服务器之间的流量,并使用HTTPS。

最好是Ruby,Python或Node包,这样我就可以按照以下方式做点什么:

mkdir simplest-proxy; cd simplest-proxy; bundle init
echo "gem 'simplest-proxy'" >> Gemfile; bundle --path vendor/bundle
bundle exec bin/simplest-proxy -p 8080 https://remote.site.example.com/

virtualenv simplest-proxy; cd simplest-proxy
bin/easy_install simplest-proxy
bin/simplest-proxy -p 8080 https://remote.site.example.com/

mkdir simplest-proxy; cd simplest-proxy
npm install simplest-proxy
node_modules/.bin/simplest-proxy -p 8080 https://remote.site.example.com/

这将允许我的应用程序连接到localhost:8080Host将转发请求(并将lo标头和其他必要的内容重写)到远程站点。我可以在WireShark中查看proxylet并了解发生了什么。

我已经快速浏览了pypi,rubygems和npm,但我发现到目前为止要么不工作(dj-revproxy,否则看起来非常有希望),用于更复杂的场景和需要设置(Host)或期望使用正确的node-reverse-proxyProxyPass)进行调用而不是重写。

更新:我现在正在使用带有ProxyPassReverse / {{1}}配置的Apache,但它感觉有点过分,需要使用配置文件。

更新:另一个不适用的解决方案是实际的HTTP代理,而不是模拟远程站点的代理。因为远程站点是一个HTTPS站点,这只会使我的应用程序在代理中执行CONNECT并且没有获得任何内容。

1 个答案:

答案 0 :(得分:30)

找到http://mitmproxy.org/

我的用例包括:

mitmproxy -p 8080 -P https://remote.site.example.com/

但还有更多。它还提供了一个ncurses UI,用于显示所有已完成的请求,并允许您检查它们。这使WireShark成为不必要的。

使用您的发行版软件包安装程序或easy_install进行安装,如问题所示:

virtualenv mitmproxy; cd mitmproxy
bin/easy_install mitmproxy
bin/mitmproxy -p 8080 -P https://remote.site.example.com/

修改

对于mitmproxy版本3,参数将是:

mitmproxy -p 8080 --mode reverse:https://remote.site.example.com/