【发布时间】:2020-08-16 22:13:32
【问题描述】:
我有一个类似 Shopify 的应用程序。所以,我的客户在创建商店时会获得子域(即customer1.myShopify.com)。
用 nginx 处理这种动态子域的情况:
server {
listen 443 ssl;
server_name admin.myapp.com;
ssl_certificate /etc/letsencrypt/live/myapp/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/myapp/privkey.pem;
location / {
proxy_pass http://admin-front-end:80/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
server {
listen 443 ssl;
server_name *.myapp.com;
ssl_certificate /etc/letsencrypt/live/myapp/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/myapp/privkey.pem;
location / {
proxy_pass http://app-front-end:80/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
这很好,所以如果您访问 admin.myapp.com,您将看到管理应用程序,如果您访问任何 xxx.myapp.com,您将看到商店前端应用程序。
问题
我想让我的客户连接他们自己的域。所以我告诉他们联系CNAME 和A Record。
A Record => @ => 12.12.12.3(my root nginx ip)
CNAME => WWW => thier.myapp.com
并非对customer.com 的每个请求都会由我的 nginx 解决。
所以我将此配置添加到我的 nginx 中,以捕获所有其他 server_name 请求:
server {
listen 80;
server_name server_name ~^.*$;
location / {
proxy_pass http://app-front-end:80/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
而且效果很好。
但是对于这种情况,我该如何处理SSL?因为它可以是任何域名。我不知道客户域名是什么。
我怎样才能让他们能够自动添加 SSL 证书而无需手动创建?
【问题讨论】:
-
嘿,你知道了吗?我发现了第三个这样的问题,但没有得到解答。