Ruby 韦德里克;Sinatra:如何将所有http流量重定向到https
我曾尝试设置一个非常简单的Sinatra和Webrick服务器,使用自签名证书在https上工作。我想将所有http流量重定向到https,在这个设置中可以吗 我有两个Ruby文件,如下所示: sinatra_ssl.rbRuby 韦德里克;Sinatra:如何将所有http流量重定向到https,ruby,redirect,https,sinatra,webrick,Ruby,Redirect,Https,Sinatra,Webrick,我曾尝试设置一个非常简单的Sinatra和Webrick服务器,使用自签名证书在https上工作。我想将所有http流量重定向到https,在这个设置中可以吗 我有两个Ruby文件,如下所示: sinatra_ssl.rb #sinatra_ssl.rb require 'webrick/https' module Sinatra class Application def self.run! certificate_content = File.open(ssl_ce
#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
#myapp.rb
require 'sinatra'
require 'path/to/sinatra_ssl'
require 'rack/ssl'
use Rack::SSL
set :server, 'WEBrick'
set :ssl_certificate, "path/to/server.crt"
set :ssl_key, "path/to/server.key"
set :port, 8443
get '/' do
'Hello World!'
end
编辑:增加了机架/ssl的要求
myapp.rb
#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
#myapp.rb
require 'sinatra'
require 'path/to/sinatra_ssl'
require 'rack/ssl'
use Rack::SSL
set :server, 'WEBrick'
set :ssl_certificate, "path/to/server.crt"
set :ssl_key, "path/to/server.key"
set :port, 8443
get '/' do
'Hello World!'
end
当前如果我访问https://localhost:8443
我得到了你好世界代码>消息,但如果我访问http://localhost:8443
我得到一个ERR\u EMPTY\u响应
,因为服务器没有路由
有没有办法做这种重定向?
你能考虑使用中间件来完成任务吗?如果需要,请尝试以下操作:
require 'rack/ssl'
use Rack::SSL
如果您不希望在本地环境中通过机架SSL强制实施SSL,则可以在config.ru中测试环境并相应地激活它:
require 'rack/ssl'
if ENV['RACK_ENV'] == 'production'
use Rack::SSL
end
我已经添加了这个,但是当我尝试通过http访问localhost时,仍然会得到ERR_EMPTY_响应,我想要的是将它重定向到一个https调用,在这个调用中一切正常。我不知道如何部署应用程序,但我通常会将它们部署在像nginx这样的反向代理之后,在那里您可以轻松地将所有http流量重定向到https@Sirl33tname谢谢我可能最终会这样做,但我现在只是在本地测试,并想知道是否可以直接使用WEBricks