Я делаю мультитенантную платформу. У меня есть основной URL-адрес example.com
, и каждый новый пользователь получит поддомен с username.example.com
, это работает. Он работает на капельке Ubuntu в Цифровом океане. Я хочу go сделать еще один шаг и позволить им добавлять собственные домены, которые указывают на мое приложение, создавая запись имени A в их DNS. Я также заработал, настроив все вручную и написав дополнительный блок сервера для пользовательского домена. Я начал с certbot для генерации сертификатов, но затем вручную изменил много кода.
Вот как выглядит мой nginx файл /nginx/sites-available/example.com
:
server {
server_name example.com *.example.com;
# pass to NODEJS app running at :3000
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com-0001/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com-0001/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
server_name customdomain.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/customdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/customdomain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
listen 80;
listen [::]:80;
server_name ~^(?<subdomain>.+)\.example.com$;
return 301 https://$subdomain.example.com$request_uri;
}
server {
listen 80;
listen [::]:80;
server_name customdomain.com$;
return 301 https://customdomain$request_uri;
}
Итак, мои вопросы являются:
Есть ли способ, которым я могу сделать это автоматически - получение сертификата для настраиваемого домена на лету и разрешение его go для моего nodejs приложения?
Должен ли я создавать несколько файлов в available-domains
вместо нескольких блоков серверов в одном файле?
- Должен ли я просто сделать это по умолчанию вместо этого?
увидеть, что блок местоположения повторяется в каждом блоке сервера, возможно ли сделать это более DRY подход?
Я очень новичок во всем этом, так что, если есть лучший способ выполнить мультитенантную настройку с SSL и пользовательскими доменами?
спасибо.