我可以启用西纳特拉与薄SSL?(Can I enable SSL in Sinatra with T

2019-06-26 04:17发布

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

是否有可能直接在西纳特拉应用程序内或通过config.ru文件来定义呢?

我花了几个小时寻找一个回答这个问题,但到目前为止还没有找到任何工作。

Answer 1:

我只花了几个小时试图找出这一个自己。

原来, 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!


Answer 2:

这些天来(西纳特拉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


Answer 3:

我使用的是与SSL运行西纳特拉和薄(在Heroku) 机架:: SslEnforcer ,这样做:

if production?
    require 'rack/ssl-enforcer'
    use Rack::SslEnforcer
end

这应该是您启用前:在您的文件会话。



文章来源: Can I enable SSL in Sinatra with Thin?
标签: ssl sinatra thin