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