Redirect 使用nginx的SSL和www重定向

Redirect 使用nginx的SSL和www重定向,redirect,ssl,express,nginx,Redirect,Ssl,Express,Nginx,我为我的服务器-example.com获得了一个证书,并选择不为www.example.com签名,因为我要将所有流量从www.example.com重定向到example.com 现在,我有一个nginx重定向用于: http://example.com→ https://example.com 及 http://www.example.com→ https://example.com 但我不能让这个工作: https://www.example.com→ https://example.co

我为我的服务器-
example.com
获得了一个证书,并选择不为
www.example.com
签名,因为我要将所有流量从
www.example.com
重定向到
example.com

现在,我有一个nginx重定向用于:

http://example.com
→ <代码>https://example.com

http://www.example.com
→ <代码>https://example.com

但我不能让这个工作:

https://www.example.com
→ <代码>https://example.com

发生的情况是,nginx在地址栏中使用
www
加载站点,然后chrome抛出SSL警告,因为交付的证书没有为
www.example.com
签名,只是
example.com

这是我的配置。我该怎么做?我是否需要购买另一个证书并在www.example.com上签名

upstream app_nodejs2 {
  server 127.0.0.1:3333;
}

server {
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}

server {
    listen 80;
    listen   [::]:80;
    listen   443 ssl;
    #ssl on;
    ssl_certificate    /root/sslcert/example.crt;
    ssl_certificate_key    /root/sslcert/example.key;

    server_name example.com;

    if ($ssl_protocol = "") {
       rewrite ^   https://$server_name$request_uri? permanent;
    }

    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;

      proxy_pass http://app_nodejs2;
      proxy_redirect off;
    }

}

你必须在www地址上放一个证书

通过使用https,您的浏览器在信任服务器之前要求安全连接。您的连接不安全,因此浏览器不会发送cookie、跟踪重定向等

这是一件好事

但这对你的cert预算来说很糟糕


如果您的CA允许您添加www作为主题替代名称,那么您可以使用一个证书处理这两个域,这很方便,并且具有相当广泛的支持

[昂贵]经验教训-始终使用免费的www。谢谢。使用www子域重新生成您的证书,它将对两者进行签名。你显然需要它。获得通配符认证要花多少钱?如果你认为它在不久的将来会有用的话,你可能会考虑它。我试图再生它,但是GeGrand不允许。原来Name.com给了我退款,我买了一个新的,并且正确地使用了www和no-www。谢谢大家-吸取了教训!