Директива map nginx: почему это разрешено только на уровне http?

В nginx map есть очень полезная директива.

Но его можно использовать только на уровне http (см. здесь http://nginx.org/en/docs/http/ngx_http_map_module.html#map).

Например, у меня есть server, и я хотел бы использовать некоторые условные переадресации на этом сервере с помощью переменной $url. Было бы очень удобно использовать эту директиву внутри server, но это невозможно. Почему?

Да, я могу это сделать и на уровне http, но на уровне http могут быть разные server, и я хотел бы сохранить эти условия в разделе server, для которого они определены.

Ответ 1

Я думаю, что если вы используете map для редиректов - это не очень хорошо в конфигах nginx. Может, переписывает, решит ли ты проблему? Smt. как https://www.nginx.com/blog/creating-nginx-rewrite-rules/

Ответ 2

Область использования map может быть исправлена ​​в исходном коде nginx. Ниже приведена часть кода из ngx_http_map_module.c. Вы можете видеть, что map может использоваться только в NGX_HTTP_MAIN_CONF, что означает только уровень http.

static ngx_command_t  ngx_http_map_commands[] = {                                                                                                      

    { ngx_string("map"),                                                                                                                               
      NGX_HTTP_MAIN_CONF|NGX_CONF_BLOCK|NGX_CONF_TAKE2,                                                                                                
      ngx_http_map_block,                                                                                                                              
      NGX_HTTP_MAIN_CONF_OFFSET,                                                                                                                       
      0,                                                                                                                                               
      NULL },