web-dev-qa-db-ja.com

乗客2.2.9、nginx 0.7.65、およびsinatra 0.94を使用してのみhttpsを提供するにはどうすればよいですか?

HttpsアクセスのみでhttpアクセスなしのWebサイトを展開しようとしています。構成ファイルにいくつかの単純な行がないだけだと確信しています。

タイトルが示すように、それは乗客2.2.9を介してnginx0.7.65のシナトラ0.9.4です。

SinatraサービスのメインRubyファイルには次のものがあります。

require 'ssl_requirement'

def ssl_required?
  true
end

config.ruには次のものがあります(関連性があるかどうかはわかりませんが):

require 'rubygems'
require 'sinatra'
require 'app.rb'

set :environment, :production
run Sinatra::Application

Nginx.confファイルは次のようになります。

 worker_processes  1;


 events {
   worker_connections  1024;
 }


 http {
   passenger_root /var/lib/gems/1.8/gems/passenger-2.2.9;
   passenger_Ruby /usr/bin/Ruby1.8;

   include       mime.types;
   default_type  application/octet-stream;


   # HTTPS server
   #
   server {
     listen       80;
     listen       443;
     server_name  an.internal.ip.address;
     root         /my/app/dir/public;
     passenger_enabled on;

     proxy_set_header X_FORWARDED_PROTO https;

     ssl                  on;
     ssl_certificate      /my/app/dir/certificate.pem;
     ssl_certificate_key      /my/app/dir/privkey.pem;

     ssl_session_timeout  5m;

     ssl_protocols  SSLv2 SSLv3 TLSv1;
     ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
     ssl_prefer_server_ciphers   on;

   }

 }

すべてのhttpリクエストをhttpsにリダイレクトする代わりに、次のエラーが発生します。

The plain HTTP request was sent to HTTPS port

どうすればこれを修正できますか? httpsリクエスト https://an.internal.ip.address 正常に動作します。

(それはnginx-0.6.36でも起こります。それだけの価値があります)。

これにシナトラのタグを付ける必要があるかどうかはわかりませんが、まだ十分な担当者がいません。

3
mmr

http:// server / と入力すると、ブラウザはポート80でサーバーにプレーンテキストのリクエストを送信します。一方、 https:// server / と入力すると '暗号化されたリクエストをポート443に送信します。実行しているのはプレーンテキストをhttpsに送信することです。そのため、ウェブサーバーは暗号化されていることを期待しますが、プレーンになります。

https:// server:80 / を実行すると機能するため、webrowserは暗号化が必要であることを認識しますが、80に送信します。ユーザーからは期待できないと思います。

あなたがしたいのは、80で暗号化されていないトラフィックを受け入れ、すべてのリクエストを443にhttpリダイレクトするだけです。

server {
  listen server_ip:80;
  server_name server_name;
  location / {
    rewrite ^/(.*) https://server_name permanent;
  }
}
1
rytis