タイトルの通り、trusterdにリバースプロキシ機能を実装しました。
これで、フロントを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
簡単ですね!
是非お試しを!