我的情况是让我们的营销部门有机会自行维护他们的重定向。到目前为止,他们将信息传递给 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_lua,ngx_perl或者ngx_js在 nginx 本身中实现读取和处理重定向配置。例如,rewrite_by_lua
指令允许你执行Lua代码来构建重写。但是,您需要注意性能,因为您将为每个请求解释代码。