У меня было приложение, похожее на Shopify. Итак, мой клиент получает субдомен при создании магазина (то есть customer1.myShopify.com
).
для обработки этого случая динамических субдоменов c с 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
, вы увидите приложение front-end магазина.
Проблема
Я хочу разрешить своему клиенту подключать собственный домен. поэтому я сказал им соединиться с 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 автоматически и без создания вручную?