0

我有一个自定义 nginx 模块,它在将请求代理到服务器之前设置一些请求头。我还使用 auth_request 进行身份验证。我的位置部分包含 auth_request 以及自定义模块指令。我想确保仅在 auth 子请求之后而不是在子请求中设置自定义标头。目前,我看到首先调用了自定义模块,并且在子请求本身中设置了标头。

4

1 回答 1

0

有两种方法可以在 nginx 中对模块进行排序。

添加模块处理程序时,它被添加到阶段

ngx_http_handler_pt *h = ngx_array_push(&cmcf->phases[NGX_HTTP_CONTENT_PHASE].handlers);
if(h == NULL)
{
    return NGX_ERROR;
}

*h = ngx_dcs_handler;

在这个例子中,我们看到模块被添加到NGX_HTTP_CONTENT_PHASE. 我认为这些auth_request会在不同的早期阶段添加?

唯一的其他方法是以正确的顺序重新编译。第一个运行的模块是configure命令行上的最后一个。

configure ... --add-module=C --add-module=B --add-module=A

在这种情况下,模块 A 先运行,然后是 B,最后是 C。

我不太确定核心模块是否可以轻松重新排序。

于 2019-03-27T07:24:26.847 回答