我可以在Sinatra中使用Thin启用SSL吗?

use*_*388 9 ssl thin sinatra

我在寻找一个简单的方法,以使在通过薄独立西纳特拉应用程序运行SSL,而不必通过--ssl,--ssl-key-file--ssl-cert-file在通过薄命令行参数.

是否可以直接在Sinatra应用程序中或通过config.ru文件定义它们?

我花了几个小时寻找这个问题的答案,但到目前为止还没有找到任何有效的方法.

pje*_*pje 11

我花了几个小时试图自己解决这个问题.

事实证明,Thin::Server.initialize放弃ssl其在选择initialization方法将其委托给它的实例(Backend,能立刻将其sslnil,忽略你已经传递到任何SSL选项Thin::Server.new,这意味着你必须设置SSL选项您将一个服务器. )

这是怎么做的:

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!
Run Code Online (Sandbox Code Playgroud)


art*_*ave 9

这些天(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
Run Code Online (Sandbox Code Playgroud)