こちらの記事を参考に
http://qiita.com/hiroshi3110/items/af7b6c4f7824539d7a53
WEBrick でやってみる
webrick_https_reverse_proxy.ru
require 'rack/reverse_proxy'
# monkey patching
module AddXForwardedProtoHeader
def set_forwarded_headers
super
return unless options[:x_forwarded_headers]
target_request_headers["X-Forwarded-Proto"] = source_request.scheme
end
end
RackReverseProxy::RoundTrip.prepend AddXForwardedProtoHeader
require 'rack/builder'
app = Rack::Builder.new {
target = ENV["TO"] || "http://localhost:9292"
use Rack::ReverseProxy do
reverse_proxy '/', target
end
run Proc.new {}
}
require 'webrick'
# これが無いと curl: (35) Unknown SSL protocol error in connection to とかになる
require 'webrick/https'
# その場でオレオレ証明書を作成
# :SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE を指定してるので要らないけど。
cn = [[ "CN", WEBrick::Utils::getservername]]
comment = "Generated by Ruby/OpenSSL"
cert, rsa = WEBrick::Utils::create_self_signed_cert(2048, cn, comment)
require 'rack/handler/webrick'
Rack::Handler::WEBrick.run app, {
:Port => 443,
:BindAddress => "0.0.0.0",
:SSLEnable => true,
:SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE,
:SSLPrivateKey => OpenSSL::PKey::RSA.new(rsa.to_s),
:SSLCertificate => OpenSSL::X509::Certificate.new(cert.to_s),
:SSLCertName => cn
}
思ったほどサクっとしてなかった。
起動
sudo rackup webrick_https_reverse_proxy.ru
余談
rack/reverse_proxy
の gem が X-Forwarded-Proto
のヘッダ付けてくれないので、とりあえずモンキーパッチで対応。
追加してプルリク送っといた。
追記
毎回証明書作りなおすと起動するたびにブラウザに注意されるので、
一度オレオレ証明書作ってそれを使ったほうが良さげな感じ。
参考:http://d.hatena.ne.jp/ozuma/20130511/1368284304
snip
webrick_opt = {
:Port => 443,
:BindAddress => "0.0.0.0",
:SSLEnable => true,
:SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE,
:SSLPrivateKey => OpenSSL::PKey::RSA.new(File.open(File.dirname(__FILE__) + "/server.key")),
:SSLCertificate => OpenSSL::X509::Certificate.new(File.open(File.dirname(__FILE__) + "/server.crt")),
}