6

我正在开发一个 Web 应用程序。

我的应用在子域上运行app.mydomain.com

我需要为我的应用程序添加 WhiteLabel。我要求我的客户通过 CNAME 指向他们自己的网站到我的应用程序。

design.customerwebsite.com指着app.mydomain.com

这是我试图解决的问题。

我创建了一个/etc/nginx/sites-available名为的新文件,为文件customerwebsite.com 添加了符号链接。

certbot我使用以下命令安装了 SSL 。

sudo certbot --nginx -n --redirect -d design.customerwebsite.com

这是我的 NGINX conf 文件的代码customerwebsite.com

server
{

 server_name www.customerwebsite.com;
 return 301 $scheme://customerwebsite.com$request_uri;
}


server {

#  proxy_hide_header X-Frame-Options;

 listen       80;
 listen       443;

  server_name design.customerwebsite.com;

        ssl_certificate /etc/letsencrypt/live/design.customerwebsite.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/design.customerwebsite.com/privkey.pem;


 root /opt/bitnami/apps/myapp/dist;
  location / {
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_hide_header X-Frame-Options;
      proxy_pass http://localhost:3000;
  }

 proxy_set_header X-Forwarded-Proto $scheme;
 if ( $http_x_forwarded_proto != 'https' )
 {
    return 301 https://$host$request_uri;
 }


}

我能够成功地运行我的网络应用程序https://design.customerwebsite.com

但是 SSL 证书显示它被指向app.mydomain.com并显示不安全。

app.mydomain.com有来自 Amazon ACM 的 SSL 证书,该证书通过负载均衡器附加。

解决这个问题的方法应该是什么?

4

3 回答 3

1

有两种解决方案 1- 将 ssl 证书添加到负载平衡:您需要请求具有所有受支持的 DNS 名称(app.mydomain.com 和 design.customerwebsite.com)/ 的证书,并且您需要管理 customerwebsite.com带有 Route53 的域。我认为在你的情况下这是不可能的。

2- 不要在负载均衡器上使用 ssl:对于这个选项,我们不会在负载均衡器上终止 ssl,但是,它会被传递给 nginx 来处理。您的负载均衡器配置应如下所示

在此处输入图像描述

您需要生成一个包含两个域的新 ssl 证书


sudo certbot --nginx -n --redirect -d app.mydomain.com -d *.mydomain.com -d design.customerwebsite.com -d *.customerwebsite.com

Nginx 配置

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


server {
 listen       80 default_server;
 server_name design.customerwebsite.com;
 return 301 https://$host$request_uri;
}

server {
  listen       443 ssl default_server;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_certificate /etc/letsencrypt/live/design.customerwebsite.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/design.customerwebsite.com/privkey.pem;

  server_name design.customerwebsite.com;
  root /opt/bitnami/apps/myapp/dist;

  location / {
      resolver 127.0.0.11 ipv6=off;

      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-Proto https
      proxy_set_header X-Real-IP $remote_addr;
      proxy_hide_header X-Frame-Options;
      proxy_pass http://localhost:3000;
  }
}
于 2020-02-26T12:59:53.300 回答
0

我认为提供给 ACM 负载均衡器的元素必须与您可能收到请求的每个域匹配。在证书中,您应该有一个包含每个匹配域的主题备用名称。

例如,在 stackoverflow.com 上,证书具有 CN *.stackexchange.com 但具有该主题备用名称:

DNS:*.askubuntu.com, DNS:*.blogoverflow.com, DNS:*.mathoverflow.net, DNS:*.meta.stackexchange.com, DNS:*.meta.stackoverflow.com, DNS:*.serverfault.com, DNS:*.sstatic.net, DNS:*.stackexchange.com, DNS:*.stackoverflow.com, DNS:*.stackoverflow.email, DNS:*.superuser.com, DNS:askubuntu.com, DNS:blogoverflow.com, DNS:mathoverflow.net, DNS:openid.stackauth.com, DNS:serverfault.com, DNS:sstatic.net, DNS:stackapps.com, DNS:stackauth.com, DNS:stackexchange.com, DNS:stackoverflow.blog, DNS:stackoverflow.com, DNS:stackoverflow.email, DNS:stacksnippets.net, DNS:superuser.com
于 2020-02-25T15:00:08.070 回答
0

你忘记了一些细节......你必须为域做一个配置

/////// app.myDominio.com ////////

就像您为普通域所做的一样,也仅为该域创建 SSL。您可以使用 let 脚本。为 NGINX LOG 配置路径,以便您可以检查 NGINX 检测到的错误。

您也可以在 NGINX 设置 * .domain.com 中使用它(其中 * 表示应用程序,也许它会检测到)

于 2020-02-26T22:35:10.593 回答