Как настроить подключение сертификатов в зависимости от домена?

Можно ли в конфигурационном файле nginx подключать SSL-сертификаты через переменные, чтобы обеспечить поддержку разных доменов, не делая их синонимами и не повторяя каждый раз директиву server_name?
  • 4 января 2024 г. 19:28
Ответы на вопрос 2
При конфигурации NGINX директивы для SSL, такие как `ssl_certificate` и `ssl_certificate_key`, обычно требуют быть заданными прямо в тексте конфигурационного файла и не поддерживают использование переменных напрямую для определения путей к сертификатам. Однако, вы можете использовать шаблоны конфигурации с директивами `include` или использовать wildcard сертификаты для поддержки нескольких поддоменов.

Вот пример использования wildcard сертификата для нескольких поддоменов:

```nginx
server {
    listen 443 ssl;
    server_name *.example.com;
    
    ssl_certificate /etc/nginx/ssl/wildcard.example.com.pem;
    ssl_certificate_key /etc/nginx/ssl/wildcard.example.com.key;
    
    # ...
}
```

Для поддержки нескольких различных доменов с разными сертификатами, сами серверные блоки будут должны быть раздельными, но вы можете уменьшить дублирование используя директиву `include` для общих конфигурационных секций.

Например, создайте конфигурационный файл со стандартной секцией настроек SSL, например `ssl-params.conf`:

```nginx
# содержимое файла ssl-params.conf
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'HIGH:!aNULL:!MD5';
ssl_prefer_server_ciphers on;
#... другие общие SSL настройки...
```

Затем включите этот файл в каждый блок server для разных доменов:

```nginx
# Для domain1.com
server {
    listen 443 ssl;
    server_name domain1.com;

    ssl_certificate /etc/nginx/ssl/domain1.com.pem;
    ssl_certificate_key /etc/nginx/ssl/domain1.com.key;

    include ssl-params.conf;

    # ...
}

# Для domain2.com
server {
    listen 443 ssl;
    server_name domain2.com;

    ssl_certificate /etc/nginx/ssl/domain2.com.pem;
    ssl_certificate_key /etc/nginx/ssl/domain2.com.key;

    include ssl-params.conf;

    # ...
}
```

Этот подход позволяет минимизировать дублирование конфигурационных настроек в файлах NGINX.

Автоматизированное управление множественными доменами и сертификатами также можно осуществить с помощью скриптогенерации файлов конфигурации или с использованием инструментов управления конфигурацией, таких как Ansible, Puppet или Chef.
Вам нужен multidomain ssl или делайте несколько server
Похожие вопросы