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


15

我处于这种情况下,是要给我们的营销部门一个机会,以自己维护他们的重定向。到目前为止,他们将信息传递给了IT部门,我们在中为他们维护了这些信息nginx.conf

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

我知道,我没有.htaccess可以访问的文件支持nginx ,并且我也不想授予对nginx包含的conf文件的写访问权限。我希望我们的行销能在数小时内打破我们的nginx设定...

如果没有让他们接触我们的负载均衡器的核心,是否存在安全的可能性?

Answers:


24

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

地图模块包括

地图模块,您可以包括一个单独的文件映射。更改文件后,仍必须重新加载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_perlngx_js在nginx本身中实现读取和处理重定向配置。例如,该rewrite_by_lua指令允许您执行Lua代码以构造重写。但是,您需要注意性能,因为您将为每个请求解释代码。


1
映射模块确实提供了一种稍微受限的方式来配置重定向。
mgorven 2012年

1
地图方法看起来很有希望!因此,我将开始编写一个简单的网站来维护地图文件。谢谢!
Sascha 2012年

2
可悲的是,此时(2014年秋季),ngx_js项目的创建时间是两年前。ngx_lua非常活跃并且维护良好。
维尔市(Ville)

现在可用的nginScript(alpha质量)允许使用js的子集。
lifeisfoo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.