乗客/ nginxの背後でSinatraアプリを実行しています。httpとhttpsの両方の呼び出しに応答できるようにしようとしています。問題は、両方がサーバーブロックで定義されている場合、https呼び出しは正常に応答しますが、httpは400「プレーンなHTTPリクエストがHTTPSポートに送信されました」エラーを生成します。これは静的ページ用なので、シナトラはこれとは何の関係もないと思います。これを修正する方法に関するアイデアはありますか?
サーバーブロックは次のとおりです。
server {
listen 80;
listen 443 ssl;
server_name localhost;
root /home/myhome/app/public;
passenger_enabled on;
ssl on;
ssl_certificate /opt/nginx/ssl_keys/ssl.crt;
ssl_certificate_key /opt/nginx/ssl_keys/ssl.key;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
location /static {
root /home/myhome/app/public;
index index.html index.htm index.php;
}
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 /500.html;
access_log /home/myhome/app/logs/access.log;
error_log /home/myhome/app/logs/error.log;
}
ssl on;
SSLを介してすべてのコンテンツを提供するようにNGINXに指示します。listen 443;
たとえばlisten 443 ssl;
、サーバーがhttpトラフィックとhttpsトラフィックの両方を配信する場合は、末尾に「ssl」フラグを使用し、ssl on;
ディレクティブを削除します。
my.example.com:443
しませんでした。代わりに動作するように変更しhttps://my.example.com
ます。奇妙なことに、Apacheでこの問題が発生したことはありません。