我为我的服务器获得了证书 - 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、遵循重定向等。
这是一件好事。
但这对您的证书预算来说很糟糕。
如果您的 CA 允许您将 www 添加为主题备用名称,您可以使用一个证书处理两个域,这很方便并且得到了相当广泛的支持。
关于redirect - SSL _and_ www 重定向与 nginx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33443097/