微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当域中有 www 时,Nginx 动态 ssl 不起作用

如何解决当域中有 www 时,Nginx 动态 ssl 不起作用

下面的代码在 example.com 上运行良好,但对于 www.example.com 失败,因为 $ssl_server_name 变为 www.example.com 并且它尝试搜索具有该名称的证书。正确的证书位置是 /home/certs/example.com 。

有没有其他办法解决这个问题?

服务器{

  server_name _; 
  listen 443 ssl http2 default_server;
  ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
  ssl_certificate /home/certs/$ssl_server_name.crt;
  ssl_certificate_key /home/certs/$ssl_server_name.key;
  ssl_prefer_server_ciphers on;
  ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DHE+AES128:!ADH:!AECDH:!MD5;
  add_header Strict-Transport-Security "max-age=31536000" always;

  location /robots.txt {
    root /home/dist/common;
  }

  location / {
    proxy_set_header  Host $host;
    proxy_set_header  X-Real-IP $remote_addr;
    proxy_set_header  X-Forwarded-Proto https;
    proxy_set_header  X-Forwarded-For $remote_addr;
    proxy_set_header  X-Forwarded-Host $remote_addr;
    proxy_set_header  X-Forwarded-Referrer $http_referer;

    set $delimeter "";
    if ($is_args) {
      set $delimeter "&";
    }
    set $args $args${delimeter}from=$ssl_server_name;

    proxy_pass http://127.0.0.1:8081$uri$is_args$args;

  }

}

解决方法

找到我的答案。您需要使用地图。

map $ssl_server_name $mapped_name {
      default $ssl_server_name;
      ~*www.(.*) $1;
 }
 server {
      ...
 }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。