我正在寻找一种简单的方法来在通过Thin运行的独立Sinatra应用程序中启用SSL,而不必通过Thin命令行传递--ssl
、--ssl-key-file
和--ssl-cert-file
参数。
是否可以直接在Sinatra应用程序中或通过config.ru文件定义它们?
我花了几个小时寻找这个问题的答案,但到目前为止还没有找到任何有效的方法。
发布于 2012-11-17 09:48:06
我只是花了几个小时试着自己解决这个问题。
事实证明,Thin::Server.initialize
在其initialization
方法中丢弃了ssl
选项(它委托给它的Backend
实例,该实例立即将其ssl
设置为nil
,忽略您传递给Thin::Server.new
的任何ssl选项。这意味着您必须在实例化服务器之后设置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!
发布于 2013-03-20 06:12:48
现在(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
发布于 2015-03-21 15:52:08
我使用Rack::SslEnforcer运行Sinatra和Thin (在Heroku上)和SSL,执行以下操作:
if production?
require 'rack/ssl-enforcer'
use Rack::SslEnforcer
end
这应该是在您的文件中启用:sessions之前。
https://stackoverflow.com/questions/11405161
复制相似问题