1. ホーム
  2. nginx

[解決済み] nginx 400 "The plain HTTP request was sent to HTTPS port" エラーへの対処法

2022-06-11 11:48:48

質問

passenger/nginx の背後で Sinatra アプリを実行しています。http と https の両方の呼び出しに応答するようにしようとしています。問題は、サーバー ブロックで両方が定義されている場合、https の呼び出しには正常に応答しますが、http では 400 "The plain HTTP request was sent to HTTPS port" というエラーが発生することです。これは静的なページに対するものなので、Sinatraはこれと何の関係もないのだと思います。これを修正する方法について何かアイデアがありますか?

これはサーバーブロックです。

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;
}

どのように解決するのですか?

同じような問題に遭遇しました。 あるサーバでは動作するのですが、同じ Nginx 構成の別のサーバでは動作しません。 Igor が回答している解決策をここで見つけました。 http://forum.nginx.org/read.php?2,1612,1627#msg-1627

はい。あるいは、SSL/非SSLサーバを1つのサーバにまとめることもできます。

server {
  listen 80;
  listen 443 default ssl;

  # ssl on   - remember to comment this out

}