人間とウェブの未来

「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。

Trusterd HTTP/2 Webサーバにリバースプロキシ機能を実装しました

タイトルの通り、trusterdにリバースプロキシ機能を実装しました。

trusterd/trusterd · GitHub

これで、フロントをHTTP/2で受けつつ、バックエンドに既存のHTTP/1.xサーバを置いてリバースプロキシすることで、HTTP/1.xのコンテンツを活用することができます。

また、設定はRubyで書けるので、ちょっと工夫すると、

  • とあるホスト名へのアクセスはバックエンドのApache+phpにリバースプロキシ
    • ただし.php以外は直接フロントで返す
  • また別のドメインの場合はHTTP/1.xで運用されてるサーバにリダイレクト
  • また別のドメインの場合はHTTP/2のローカルファイルを配信

というような処理が簡単に書けます。以下サンプルです。

SERVER_NAME = "Trusterd"
SERVER_VERSION = "0.0.1"
SERVER_DESCRIPTION = "#{SERVER_NAME}/#{SERVER_VERSION}"

s = HTTP2::Server.new({

  :port           => 443,
  :document_root  => "/usr/local/apache/htdocs/wiki/",
  :server_name    => SERVER_DESCRIPTION,

  :worker         => "auto",
  :run_user       => "daemon",

  :key            => "/usr/local/trusterd/ssl/server.key",
  :crt            => "/usr/local/trusterd/ssl/server.crt",

  :callback       => true,
})

# URLとファイルの紐付けフェーズでコールバック
s.set_map_to_strage_cb {

  if s.hostname == "wiki.matsumoto-r.jp"
    # .phpはバックエンドApacheへプロキシ
    # それ以外は直接/usr/local/apache/htdocs/wiki/からserve
    if s.uri == "/" || s.uri =~ /.*\.php$/
      s.upstream_uri = s.percent_encode_uri
      s.upstream_host = "127.0.0.1"
      s.upstream_port = 8082
    end
  elsif s.hostname == "blog.matsumoto-r.jp"
    # HTTP/1.xのページへリダイレクト
    s.response_headers["location"] = "http://blog.matsumoto-r.jp"
    s.set_status 302
  else
    # serve local files
    docroot = "/usr/local/trusterd/htdocs"
    if s.uri == "/"
      s.filename = "#{docroot}/index.html"
    else
      s.filename = "#{docroot}#{s.uri}"
    end
  end

}

s.run

簡単ですね!

trusterd/trusterd · GitHub

是非お試しを!