私のSSL証明書はmydomain.comのためのものなので、wwwなしですべてのwww.mydomain.comをリダイレクトしようとしています。今、これらすべての作業:
http://www.mydomain.com
http://mydomain.com
https://mydomain.com
しかし https://www.mydomain.com はブラウザに「サイトが安全ではありません」という警告を表示しています...以下のようなリダイレクトを設定しようとしましたが、スクリプトのどこにバグがあるか教えてください...
server {
listen 80;
server_name www.mydomain.com mydomain.com;
rewrite ^(.*) https://mydomain.com$1 permanent;
client_max_body_size 100M;
location / {
index index.htm index.html index.php;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /var/www/mysite$fastcgi_script_name;
}
}
server {
listen 443;
ssl on;
ssl_certificate /usr/local/nginx/conf/public.crt;
ssl_certificate_key /usr/local/nginx/conf/server.key;
server_name www.mydomain.com;
rewrite ^(.*) https://mydomain.com$1 permanent;
}
server {
listen 443;
ssl on;
ssl_certificate /usr/local/nginx/conf/public.crt;
ssl_certificate_key /usr/local/nginx/conf/server.key;
client_max_body_size 100M;
server_name mydomain.com;
root /var/www/mysite;
index index.php;
location ~ \.php$ {
include fastcgi_params;
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /var/www/mysite$fastcgi_script_name;
}
}
設定スクリプトにバグはありません。
現在の構成では(標準の単一サブジェクトSSL証明書がインストールされていると仮定して)、これはオプションではありません。
この理由は、https接続のしくみです。
クライアント(ブラウザ)がサーバー(nginx)にhttpsリクエストを発行すると、SSLハンドシェイクを介してSSLセッションを開始します。ハンドシェイクが成功してセッションが確立された場合にのみ、ブラウザはホスト名を含む実際のHTTPリクエストを送信します。 SSL/TLSはデータ接続に暗号化を提供する方法であるだけでなく、サーバーがクライアントに対して自身を認証する方法でもあるためです。認証プロセスの一環として、ブラウザーはサーバーのIDを検証します。検証チェックの1つは、証明書のサブジェクト名を、ブラウザーがコンテンツを要求しようとしているホスト名と照合することです。この検証が失敗した場合、ブラウザはユーザーに警告を発行します。
検証プロセスが失敗するため、サーバーはポート443リスナーでwww.mydomain.comのHTTPリクエストを受信しないため、リダイレクト応答をクライアント/ブラウザーに送信できません。
https://www.mydomain.com/ から https://mydomain.com へのリダイレクトを有効にするには、いくつかのオプションがありますが、すべてこのようになります:ホスト名ごとにサブジェクトを含む証明書が必要です。
SAN証明書
mydomain.com
とwww.mydomain.com
の両方の要求に一致するようになりました。複数のIPアドレス
www.mydomain.com
のSSL証明書を取得しますwww.mydomain.com
https server
を構成します(まだポート443)www.mydomain.com
https server
を構成しますTLS SNI
www.mydomain.com
のSSL証明書を取得しますSNIはブラウザのサポートに制限があるため、提案3は避けます。 SNIのnginxドキュメント を確認してください(ページの下部)。
[〜#〜] update [〜#〜]:一部の認証局は、追加の無料の単一サブジェクト証明書を提供しますSAN = www.
接頭辞。
ドメインが一致しない場合、「site-not-safe」警告を回避することはできません。証明書は、リダイレクト専用ドメインを含め、HTTPS経由で提供するすべての単一ドメインで有効である必要があります。
証明書が「www.example.com」に対して有効でなく、「example.com」に対してのみ有効である場合、 https://www.example.com/ から-にリダイレクトできません https://example.com/ セキュリティ警告なし。
あなたはこれを試すことができます:
server {
listen 443;
server_name www.domain.com;
return 301 https://domain.com$request_uri;
}
それ以外の場合は、ワイルドカード証明書を取得できます。これにより、すべての第3レベルドメインがカバーされます。