--ssl
Thin コマンド ライン経由で ,--ssl-key-file
および--ssl-cert-file
パラメータを渡すことなく、Thin 経由で実行されているスタンドアロンの Sinatra アプリケーションで SSL を有効にする簡単な方法を探しています。
それらを Sinatra アプリ内または config.ru ファイル経由で直接定義することは可能ですか?
この質問に対する答えを探すのに数時間を費やしましたが、これまでのところ、うまくいくものは見つかりませんでした。
私はこれを自分で理解しようとして数時間を費やしました。
はメソッド中にオプションをThin::Server.initialize
破棄することがわかります( のインスタンスに委譲し、 に渡した ssl オプションを無視して、 をすぐに に設定します。これは、サーバーをインスタンス化した後にssl オプションを設定する必要があることを意味します。 )ssl
initialization
Backend
ssl
nil
Thin::Server.new
方法は次のとおりです。
class App < Sinatra::Base
# ...
def self.run!
rack_handler_config = {}
ssl_options = {
:private_key_file => '/path/to/foo.key',
:cert_chain_file => '/path/to/bar.crt',
:verify_peer => false,
}
Rack::Handler::Thin.run(self, rack_handler_config) do |server|
server.ssl = true
server.ssl_options = ssl_options
end
end
end
App.run!
最近 (sinatra 1.4.1)run!
は、サーバーを生成するブロックを受け入れます。だからあなたはこれを行うことができます:
MyApp.run! do |server|
ssl_options = {
:cert_chain_file => '/path/to/bar.crt',
:private_key_file => '/path/to/foo.key',
:verify_peer => false
}
server.ssl = true
server.ssl_options = ssl_options
end
Rack::SslEnforcerを使用して SSL で Sinatra と Thin (Heroku 上) を実行しています。
if production?
require 'rack/ssl-enforcer'
use Rack::SslEnforcer
end
これは、ファイルで :sessions を有効にする前に行う必要があります。