Heroku で Reverse Proxy
ろくに調べもせず、明後日の方向に進んでいる気がするけれど。
require 'rack/reverse_proxy' if ENV['BASIC_AUTH_USERNAME'] && ENV['BASIC_AUTH_PASSWORD'] && !ENV['BASIC_AUTH_USERNAME'].empty? && !ENV['BASIC_AUTH_PASSWORD'].empty? use Rack::Auth::Basic do |username, password| username == ENV['BASIC_AUTH_USERNAME'] && password == ENV['BASIC_AUTH_PASSWORD'] end end use Rack::ReverseProxy do reverse_proxy_options preserve_host: true, replace_response_host: true if ENV['BASIC_AUTH_USERNAME'] && ENV['BASIC_AUTH_PASSWORD'] && !ENV['BASIC_AUTH_USERNAME'].empty? && !ENV['BASIC_AUTH_PASSWORD'].empty? reverse_proxy '/', ENV['REVERSE_URL'], username: ENV['BASIC_AUTH_USERNAME'], password: ENV['BASIC_AUTH_PASSWORD'] else reverse_proxy '/', ENV['REVERSE_URL'] end end app = proc do |env| [ 200, { 'Content-Type' => 'text/plain' }, 'b' ] end run app
jaswope/rack-reverse-proxy を使って実現。gem だとリダイレクト対応がされていないので、GitHub の最新ソースを使用。
igrigorik/em-proxy も試してみたけれど、リダイレクト対応がよく分からず断念した。
最新 master ブランチからアプリを作って、デプロイが成功したら Reverse Proxy アプリの環境変数を更新(heroku config:set)してスイッチする、様な感じで使えれば良いな、と。
- Heroku の dyno 1 個で Reverse Proxy を動かすのはどうなんだろうか
- EventMachine 系であれば良いのかな
- Ruby 実装調べちゃったけど、node.js で Reverse Proxy したら良かったのかな
- リダイレクト対応が怪しい
- ログイン後にリダイレクトする様なアプリで試して上手くいったけど…
- google.com のリダイレクトはループした…
まあ、おもちゃ、かな。