2015-01-03 2 views
3

자체 서명 된 인증서로 https를 통해 작동하는 매우 간단한 Sinatra 및 Webrick 서버를 설정하려고했습니다. 모든 HTTP 트래픽을 https로 리디렉션하고 싶습니다.이 설정에서 가능합니까?WEBrick & Sinatra : 모든 http 트래픽을 https로 리디렉션하는 방법

나는 두 개의 루비 아래와 같은 파일이 있습니다

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 

편집 : myapp.rb 랙/SSL의 추가 요구 사항

#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:8443Hello World! 메시지가 표시되지만 http://localhost:8443을 방문하면 서버에 경로가 없으므로 ERR_EMPTY_RESPONSE이 표시됩니다.

이 리디렉션을 수행 할 방법이 있습니까?

+0

어떻게 응용 프로그램을 배포 할 지 모르겠지만 대개 nginx와 같은 역방향 프록시 뒤에 배포하고 HTTP 트래픽을 https로 쉽게 리디렉션 할 수 있습니다 –

+0

@ Sirl33tname 감사합니다. 지금 당장 WEBricks로 가능한지 궁금합니다. – Aly

답변

2

작업에 미들웨어 rack-ssl을 사용할 수 있습니까? 다음 경우는이 시도 :

require 'rack/ssl' 
use Rack::SSL 
+0

나는 이것을 추가했지만 여전히 ERR_EMPTY_R을 얻습니다. ESPONSE를 통해 http를 통해 localhost에 액세스하려고 할 때,이 작업은 https 호출로 리디렉션됩니다. – Aly

0

당신은 SSL은 당신이 당신의 config.ru의 환경을 테스트 할 수 있습니다 해당 지역의 환경에서 랙 SSL을 통해 시행하지 않고 그에 따라 활성화하면 :

require 'rack/ssl' 

if ENV['RACK_ENV'] == 'production' 
    use Rack::SSL 
end 
관련 문제