维护来自外部源的 nginx 重定向

维护来自外部源的 nginx 重定向

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

其中一些人非常熟悉 IIS 或 Apache 中的重定向,但没有选择让他们直接访问 nginx 配置。

我发现,nginx 不支持.htaccess我可以授予访问权限的文件,而且我也不想授予 nginx 包含的 conf 文件的写访问权限。我预计,我们的营销人员会在几个小时内破坏我们的 nginx 设置……

在不让他们访问我们负载均衡器核心的情况下,是否有一种安全的可能性?

答案1

没有内置方法可以正确隔离重写配置。您可以采取三种方法。

地图模块包括

地图模块允许您从单独的文件包含映射。文件更改后,Nginx 仍需重新加载,并且映射文件必须语法正确,但它确实限制了可以执行的操作。

nginx.conf

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

server {
    ...
    if ($new) {
        rewrite ^ $new redirect;
    }
    ...
}

marketing.map

/about  /company/about-us;
~^/people/(?<person>.*)$    /company/people/$person;

预处理配置

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

/foo/(.*) /bar/$1

和一个脚本:

#!/bin/sh
while read SOURCE DEST; do
    echo "rewrite $SOURCE $DEST permanent;"
done < redirects.txt > redirects.conf

形成以下配置:

rewrite /foo/(.*) /bar/$1 permanent;

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

即时处理

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

相关内容