SSL _and_ www与nginx重定向

时间:2015-10-30 18:57:30

标签: redirect ssl express nginx

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

现在,我有一个nginx重定向工作:

http://example.comhttps://example.com

http://www.example.comhttps://example.com

但我不能让这个工作:

https://www.example.comhttps://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;
    }

}

1 个答案:

答案 0 :(得分:1)

您必须在www地址上放置证书。

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

这是一件好事。

但是你的证书预算很糟糕。

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