9

次のドメインからのすべてのトラフィックをリダイレクトしたいと考えています。

  • http://domain.com
  • http://www.domain.com
  • https://domain.com

  • https://www.domain.com

上記ドメインのSSL証明書を持っています。Passenger が提供する Rails アプリをホストします。

ネイキッド ドメイン リダイレクトを実現するために、DNSimple アカウントに URL リダイレクトを設定しました。

URL domain.com  3600  https://www.domain.com

私のサーバーブロックは次のとおりです(特に、 Nginxのno-wwwからwwwおよびwwwからno-wwwに触発されました):

server {
    listen          80;
    listen          443;
    server_name     domain.com;

    ssl                             on;
    ssl_certificate                 /etc/ssl/domain-ssl.crt;
    ssl_certificate_key             /etc/ssl/domain.key;
    ssl_session_timeout             5m;
    ssl_protocols                   SSLv2 SSLv3 TLSv1;
    ssl_ciphers                     HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers       on;

    server_tokens   off;
    access_log      /dev/null;
    error_log       /dev/null;

    return 301 https://www.domain.com$request_uri;
}

server {
    listen          443 ssl;
    server_name     www.domain.com;

    root                            /home/deploy/app/current/public;
    passenger_enabled               on;
    passenger_app_env               production;
    passenger_set_cgi_param         HTTP_X_FORWARDED_PROTO https;

    ssl                             on;
    ssl_certificate                 /etc/ssl/domain-ssl.crt;
    ssl_certificate_key             /etc/ssl/domain.key;
    ssl_session_timeout             5m;
    ssl_protocols                   SSLv2 SSLv3 TLSv1;
    ssl_ciphers                     HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers       on;
}

passenger_pre_start https://www.domain.com;

機能するもの:

  • ネイキッド ドメインがセキュアにリダイレクトされるhttps://www
  • http://wwwドメインはセキュアにリダイレクトされますhttps://www
  • https://www作品

しないこと:

  • Nakedhttps://が機能しない、ブラウザーがサーバーが見つからないというメッセージをスローする

基本的に、すべてのトラフィックをセキュアにリダイレクトしたいと考えていhttps://www.domain.comます。ここで何が欠けていますか?

4

4 に答える 4

5

domain.com の証明書がない場合、https://domain.com から https://www.domain.com へのリダイレクトは機能ません。ブラウザがリダイレクトを取得する前に、SSL 接続を正常に確立する必要があるためです。 (https は SSL 内の http です) 証明書が一致しないため、これは失敗します。

于 2014-03-29T11:02:59.127 に答える