### Автоматическое обновление сертификатов SSL/TLS
Автоматическое обновление SSL/TLS сертификатов обычно выполняется с помощью инструментов, таких как Certbot (для Let's Encrypt сертификатов) или аналогичных. Основные шаги для настройки автоматического обновления:
1. Установите Certbot:
```bash
sudo apt-get update
sudo apt-get install certbot
```
2. Запустите Certbot для получения сертификата, указав метод аутентификации (например, `--nginx` если у вас NGINX или `--apache` для Apache) и домены:
```bash
sudo certbot --nginx -d example.com -d www.example.com
```
3. При успешном получении сертификата, Certbot добавит необходимые настройки в конфигурацию вашего веб-сервера и создаст задачу `cron` или `systemd` таймер для автоматического обновления сертификатов.
4. Проверьте, что задача на обновление создана и правильно настроена:
- Для `cron`: проверьте содержимое `/etc/crontab` или `/etc/cron.*/*`
- Для `systemd`: проверьте таймер с использованием команд `systemctl list-timers` и `systemctl status certbot.timer`
### Использование переменной $domain в конфигурации NGINX
Для того чтобы использовать переменную в `server_name`, вам нужно сначала определить её. Вы можете использовать директиву `map` для создания переменной на основе значения `$host` или `$http_host`. Вот пример использования `map` в глобальной конфигурации NGINX (обычно в `nginx.conf`):
```nginx
http {
map $http_host $domain {
hostnames;
default "";
example.com example.com;
www.example.com www.example.com;
# ... другие домены и соответствия ...
}
# ... остальные настройки ...
}
```
Теперь вы можете использовать эту переменную `$domain` в конфигурации сервера:
```nginx
server {
server_name $domain;
ssl_certificate /path/to/certificates/$domain.crt;
ssl_certificate_key /path/to/keys/$domain.key;
# ... остальные настройки сервера ...
}
```
Однако следует отметить, что `server_name` не может использовать переменные в их обычной реализации из-за того, как NGINX определяет блоки сервера на этапе загрузки. Вместо этого, рассмотрите использование постоянных значений или регулярных выражений в `server_name` и использование переменных только для сертификатов.
Кроме того, `$host` обычно выбирается в контексте запроса и может быть неопределённым на этапе загрузки, что делает невозможным использование подобных переменных в `server_name`.
Для SSL-сертификатов использование переменных допустимо в `ssl_certificate` и `ssl_certificate_key`, поскольку они обрабатывается при установлении SSL-соединения, когда имя сервера (SNI) уже известно.
Если вам всё же требуется динамически задавать `server_name`, нужно использовать более продвинутые настройки. Один из подходов может заключаться в использовании wildcard в `server_name` с последующим программируемым перенаправлением в зависимости от запрошенного хоста. Также для обслуживания множества доменов можно расс