nginx地图指令:为什么只允许http级别?

nginx map有一个非常有用的指令。

但是可以仅在http级别使用它(请参阅http://nginx.org/en/docs/http/ngx_http_map_module.html#map中的文档)。

例如我有一个server定义,我想在这个服务器使用$urlvariables使用一些条件redirect。 在server使用这个指令是非常方便的,但这是不可能的。 为什么?

是的,我也可以在http层次上完成,但是可能会在http层次上定义不同的server ,我希望将这些条件保留在定义的server部分中。

可以使用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 },