Как правильно настроить NGINX для нескольких пользовательских доменов с SSL - PullRequest
1 голос
/ 01 марта 2020

Я делаю мультитенантную платформу. У меня есть основной 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;
}

Итак, мои вопросы являются:

  1. Есть ли способ, которым я могу сделать это автоматически - получение сертификата для настраиваемого домена на лету и разрешение его go для моего nodejs приложения?

  2. Должен ли я создавать несколько файлов в available-domains вместо нескольких блоков серверов в одном файле?

  3. Должен ли я просто сделать это по умолчанию вместо этого?

увидеть, что блок местоположения повторяется в каждом блоке сервера, возможно ли сделать это более DRY подход?

Я очень новичок во всем этом, так что, если есть лучший способ выполнить мультитенантную настройку с SSL и пользовательскими доменами?

спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...