ruby - 如何为独立的 Sinatra 应用程序启用 SSL?

标签 ruby ssl sinatra webrick

我想用 Sinatra 编写一个快速服务器应用程序。它必须是独立的(即不使用 apache/nginx/passenger)但也必须支持 SSL。

是否有一种简单的方法可以为 Sinatra 启用 SSL 支持(例如使用 WEBRick)?

最佳答案

要使用 MRI ruby​​ 执行此操作,请使用以下 monkeypatch:

sinatra_ssl.rb:

require 'webrick/https'

module Sinatra
  class Application
    def self.run!
      certificate_content = File.open(ssl_certificate).read
      key_content = File.open(ssl_key).read

      server_options = {
        :Host => bind,
        :Port => port,
        :SSLEnable => true,
        :SSLCertificate => OpenSSL::X509::Certificate.new(certificate_content),
        :SSLPrivateKey => OpenSSL::PKey::RSA.new(key_content)
      }

      Rack::Handler::WEBrick.run self, server_options do |server|
        [:INT, :TERM].each { |sig| trap(sig) { server.stop } }
        server.threaded = settings.threaded if server.respond_to? :threaded=
        set :running, true
      end
    end
  end
end

然后,在您的独立应用程序中:

app.rb

require 'sinatra'
require 'sinatra_ssl'

set :port, 8443
set :ssl_certificate, "server.crt"
set :ssl_key, "server.key"

get "/" do
  "Hello world!"
end

关于ruby - 如何为独立的 Sinatra 应用程序启用 SSL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2362148/

相关文章:

ssl - 这个 SSL 场景是否有效?

php - Laravel 在使用 HTTPS 时添加/删除字符

ruby - Sinatra 启用 :sessions not working on passenger/apache

heroku - 本地环境变量和 Heroku

ruby - 为什么我的 Heroku 应用程序的 PostgreSQL 数据库上有打开的连接?我如何关闭它们?

ruby - 在 Ruby 中将一个文件中的属性替换为另一个文件中的属性

ruby - 扫描并拆分字符串

ruby - 脚本 'Game_Actor'第335行(由于缺少代码,无法在RPG Maker XP中打开菜单吗?)

ruby - 如何根据嵌套值从数组数组中删除重复条目?

python - 强制请求库在 Python 中使用 TLSv1.1 或 TLSv1.2