从外部来源维护nginx中的redirect

我处于这种情况下,让我们的营销部门有机会保持自己的redirect。 到目前为止,他们将这些信息传递给了IT部门,我们在nginx.conf为他们维护了这些信息。

其中一些人对IIS中甚至Apache中的redirect非常熟悉,但是不能让他们直接访问nginxconfiguration。

我看到,没有nginx支持.htaccess文件,我可以访问,我也不希望授予对nginx包括的conf文件的写访问权限。 我预计,我们的营销将在几小时内打破我们的nginx设置。

有没有一个安全的可能性,而不让他们访问我们的负载平衡器的核心?

没有内置的方法来正确隔离重写configuration。 有三种方法你可以采取。

地图模块包括

地图模块允许您包含来自单独文件的映射。 在更改文件之后,Nginx仍然需要重新加载,映射文件必须在语法上是正确的,但是它限制了可以完成的工作。

nginx.conf

 map $uri $new { include /etc/nginx/marketing.map; } if ($new) { rewrite ^ $new redirect; } 

marketing.map

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

预处理configuration

首先是编写一个脚本,将您定义的某种格式的redirect转换为nginxconfiguration。 例如,给出一个空格分隔的redirect列表:

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

和一个脚本:

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

形成以下configuration:

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

然后你想在整个configuration上运行nginx -t来检查它在重装之前是否有效。

即时处理

第二种方法是使用ngx_lua , ngx_perl或ngx_js来实现在nginx中读取和处理你的redirectconfiguration。 例如, rewrite_by_lua指令允许您执行Lua代码来构build重写。 你需要注意性能,因为你会解释每个请求的代码。