nginx использует $ server_name в пути ssl_certificate

33

Как я могу использовать имя переменной в пути к файлу?

ssl_certificate /home/ec2-user/.certificados/$server_name.crt;
ssl_certificate_key /home/ec2-user/.certificados/$server_name.key;
Claytinho
источник

Ответы:

37

Вы не можете использовать переменные в каждой директиве. ssl_certificateтрактуется как буквенная строка и является одной из многих директив, где переменные не поддерживаются.

Чтобы указать разные сертификаты для хостов, вы должны явно записать их в блоке сервера:

server {
    server_name example.com;
    ssl_certificate /home/ec2-user/.certificados/example.com.crt;
    ssl_certificate_key /home/ec2-user/.certificados/example.com.key;
    # ...
}
server {
    server_name example.net;
    ssl_certificate /home/ec2-user/.certificados/example.net.crt;
    ssl_certificate_key /home/ec2-user/.certificados/example.net.key;
    # ...
}
# ...

Если вам неудобно дублировать конфигурацию, создайте шаблоны и сгенерируйте конфигурацию nginx, используя эти шаблоны. Смотрите также http://nginx.org/en/docs/faq/variables_in_config.html .

Lekensteyn
источник
6
поддержка переменных в ssl_certificateи ssl_certificate_keyбыла добавлена ​​сегодня! nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_certificate
Эндрю Браун
6

Вы можете использовать переменные начиная с nginx 1.15.9 (26 февраля 2019)

Обратите внимание, что использование переменных подразумевает, что сертификат будет загружен для каждого рукопожатия SSL, и это может отрицательно сказаться на производительности.

Но помните об изменениях в nginx 1.15.12 (16 апреля 2019 г.):

Исправление: ошибка сегментации могла возникать в рабочем процессе, если переменные использовались в директивах "ssl_certificate" или "ssl_certificate_key", и сшивание OCSP было включено.

Мустафа ЙИЛДИРИМ
источник