[英]WEBrick & Sinatra: how to redirect all http traffic to https
我试图建立一个非常简单的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_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
编辑:增加了机架/ ssl myapp.rb的 要求
#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
我会得到Hello World!
消息,但如果我访问http://localhost:8443
我得到一个ERR_EMPTY_RESPONSE
因为服务器没有它的路由。
有没有办法做这个重定向?
你能考虑使用中间件rack-ssl来完成任务吗? 如果那么试试这个:
require 'rack/ssl'
use Rack::SSL
如果您不希望在本地环境中通过rack-ssl强制执行SSL,那么您可以在config.ru中测试环境并相应地激活它:
require 'rack/ssl'
if ENV['RACK_ENV'] == 'production'
use Rack::SSL
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.