Define ssl_certificate using $server_name

Maxim Dounin mdounin at mdounin.ru
Tue Oct 13 03:17:38 MSD 2009


Hello!

On Tue, Oct 13, 2009 at 02:47:13AM +0400, Daniel Podolsky wrote:

> > В nginx'е есть поддержка SNI начиная с 0.5.23 (при условии сборки
> > с поддерживающей это версией openssl), работает совершенно
> > прозрачно с точки зрения конфигурации (начинает использоваться тот
> > сертификат, который указан в запрошенном клиентом блоке server).
> Не-не-не :) Я - подкованный парень. Я чисто про конфиг nginx - можно
> ли, описывая сервер, использовать переменные для задания директив?

А, не понял вопроса, sorry.  In no particular order:

1. В ssl_certificate - нельзя, т.е. вообще.  Он загружается на 
этапе парсинга конфигарации, а переменные в nginx'е - времени 
выполнения запроса.

2. Не нужно использовать переменные там, где они не могут/должны 
принимать различные значения при обработке разных запросов.  См. 
выше, переменные в nginx'е - раскрываются для каждого запроса.

Если задача - сократить объём вводимого в конфиге, то решение - 
это генератор конфигов (начиная от sed + make и заканчивая любой 
другой конструкцией на вкус использующего).

А переменные - оставьте в покое, они нужны для другого.  Там, где 
они поддерживаются, об этом явно написано.

> Ну, вот еще пример:
> 
> set $app_uri "/app/"
> 
> server {
>   listen 80;
>   location $app_uri {
>             rewrite ^ https://$host/$request_uri? redirect;
>         }
>   }
> 
> server {
>   listen 443;
>   location $app_uri {
>       proxy_pass http://127.0.0.1:8080;
>    }
> }

И так - тоже нельзя, потому что дерево location'ов строится на 
этапе парсинга конфигурации.  И не нужно, по всё тем же причинам.

> Вопрос регулярно обсуждается, но ни вспомнить ответ, ни нагуглить не
> справляюсь :(

Регулярно приводимых ответов два: 1) тот что выше, и 2) "возможно 
следует сделать макросы (== переменные времени парсинга конфига), 
для тех кто не понял ответ выше". 

Maxim Dounin





More information about the nginx-ru mailing list