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でも起こります。それだけの価値があります)。
これにシナトラのタグを付ける必要があるかどうかはわかりませんが、まだ十分な担当者がいません。
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;
}
}