从外部源维护 nginx 中的重定向

Sas*_*cha 18 rewrite nginx

我的情况是让我们的营销部门有机会自己维护重定向。到现在为止,他们将信息传递给 IT 部门,我们在nginx.conf.

其中一些人非常熟悉 IIS 甚至 Apache 中的重定向,但无法让他们直接访问 nginx 配置。

我看到,.htaccess我可以访问的文件没有 nginx 支持,而且我也不想授予对 nginx 包含的 conf 文件的写访问权限。我希望,我们的营销将在数小时内破坏我们的 nginx 设置......

如果不让他们访问我们的负载均衡器的核心,是否有安全的可能性?

mgo*_*ven 27

没有内置的方法来正确隔离这样的重写配置。您可以采用三种方法。

地图模块包括

地图模块,您可以包括一个单独的文件映射。更改文件后仍然需要重新加载 Nginx,并且映射文件必须在语法上正确,但它确实限制了可以做的事情。

nginx.conf

map $uri $new {
    include /etc/nginx/marketing.map;
}

server {
    ...
    if ($new) {
        rewrite ^ $new redirect;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

marketing.map

/about  /company/about-us;
~^/people/(?<person>.*)$    /company/people/$person;
Run Code Online (Sandbox Code Playgroud)

预处理配置

第一个是编写一个脚本,将重定向从您定义的某种格式转换为 nginx 配置。例如,给定一个空格分隔的重定向列表:

/foo/(.*) /bar/$1
Run Code Online (Sandbox Code Playgroud)

和一个脚本:

map $uri $new {
    include /etc/nginx/marketing.map;
}

server {
    ...
    if ($new) {
        rewrite ^ $new redirect;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

形成以下配置:

rewrite /foo/(.*) /bar/$1 permanent;
Run Code Online (Sandbox Code Playgroud)

然后,您希望nginx -t在整个配置上运行以在重新加载之前检查它是否有效。

即时处理

第二种选择是使用ngx_luangx_perlngx_js在 nginx 本身中实现读取和处理重定向配置。例如,该rewrite_by_lua指令允许您执行Lua代码以构造重写。但是,您需要注意性能,因为您将为每个请求解释代码。

  • 遗憾的是,此时(2014 年秋季)ngx_js 项目最后一次被触及是在两年前。然而,ngx_lua 非常活跃且维护良好。 (2认同)