¶ ↑
EM-ProxyEventMachine Proxy DSL for writing high-performance transparent / intercepting proxies in Ruby.
-
Slides from RailsConf 2009: bit.ly/D7oWB
-
GoGaRuCo notes & Slides: www.igvita.com/2009/04/20/ruby-proxies-for-scale-and-monitoring/
¶ ↑
Getting started# install & configure gemcutter repos gem update --system gem install gemcutter gem tumble gem install em-proxy irb:0> require 'em-proxy'
¶ ↑
Simple port forwarding proxyProxy.start(:host => "0.0.0.0", :port => 80, :debug => true) do |conn| conn.server :srv, :host => "127.0.0.1", :port => 81 # modify / process request stream conn.on_data do |data| p [:on_data, data] data end # modify / process response stream conn.on_response do |backend, resp| p [:on_response, backend, resp] resp end # termination logic conn.on_finish do |backend, name| p [:on_finish, name] # terminate connection (in duplex mode, you can terminate when prod is done) unbind if backend == :srv end end
For more examples see the /examples directory.
-
SMTP Spam Filtering
-
Duplicating traffic
-
Selective forwarding
-
Beanstalkd interceptor
-
etc.