web-dev-qa-db-ja.com

Elastic Load Balancerを設定した後、httpsが機能しなくなりました。 Nginxエラー

ロードバランサーの背後にないときに正常に動作する通常のインスタンスがあります。 80を80に転送し、443を443およびスティッキーセッションに転送するELBを設定しました。その後、httpsページに移動するとこのエラーが発生します。

The plain HTTP request was sent to HTTPS port

Nginx構成の特定のページでhttpsを強制するプロセスを処理します。これを機能させるには何をする必要がありますか?私は以下のnginx設定の最低限のバージョンを入れています。

http {

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

  # Directories
  client_body_temp_path tmp/client_body/  2 2;
  fastcgi_temp_path     tmp/fastcgi/;
  proxy_temp_path       tmp/proxy/;
  uwsgi_temp_path       tmp/uwsgi/;

  server {
    listen              443;
    ssl                 on;
    ssl_certificate     ssl.crt;
    ssl_certificate_key ssl.key;

    server_name www.shirtsby.me;
    if ($Host ~* ^www\.(.*)) {
        set $Host_without_www $1;
        rewrite ^/(.*) $scheme://$Host_without_www/$1 permanent;
    }

    location ~ ^/(images|img|thumbs|js|css)/  {
          root /app/public;
    }
    if ($uri ~ ^/(images|img|thumbs|js|css)/) {
        set $ssltoggle 1;
    }
    if ($uri ~ "/nonsecure") {
        set $ssltoggle 1;
    }
    if ($ssltoggle != 1) {
        rewrite ^(.*)$ http://$server_name$1 permanent;
    }

    location / {
      uwsgi_pass  unix:/site/sock/uwsgi.sock;
      include     uwsgi_params;
    }

  }

  server {
    listen      80;
    server_name www.shirtsby.me;
    if ($Host ~* ^www\.(.*)) {
        set $Host_without_www $1;
        rewrite ^/(.*) $scheme://$Host_without_www/$1 permanent;
    }

    if ($uri ~ "/secure") {
        set $ssltoggle 1;
    }
    if ($ssltoggle = 1) {
        rewrite ^(.*)$ https://$server_name$1 permanent;
    }

    location ~ ^/(images|img|thumbs|js|css)/  {
          root /app/public;
    }

    location / {
      uwsgi_pass  unix:/home/ubuntu/site/sock/uwsgi.sock;
      include     uwsgi_params;
    }
  }
}
4
jchysk

結局、nginx IRC Channelでvandemarから回答を得ることになりました。かなり単純に見えますが、それを理解するのに苦労しました。ELBはSSLを処理していたので、すでにすべての証明書情報を提供していました。 。問題は、個々のインスタンスまたは構成ファイルで再度処理しようとしたことでした。解決策は、構成ファイルからすべてのSSLを削除することです。したがって、これらの3行を削除すると、すべてが修正されました。

ssl                 on;
ssl_certificate     ssl.crt;
ssl_certificate_key ssl.key;
3
jchysk

私も同じ問題を抱えていました。しかし、その後、elb-listenerが正しく構成されていないことに気付きました。ロードバランサープロトコル:https、ロードバランサーポート:443、インスタンスポート:443を設定しましたが、インスタンスプロトコルをhttpからhttpsに変更するのを忘れました。

0