我有一个 nginx 实例,为几个网站提供服务。配置的设置方式是/etc/nginx.conf.d
包含几个.conf
文件/etc/nginx/conf.d
,每个网站一个。我相信这是相当标准的。
每个.conf
文件都有一个map
用于映射 URI 的部分,以及一个server
使用 的部分map
,如下所示:
map $request_uri $redirect_uri {
/foo /bar;
}
server {
...
if ($redirect_uri) {
return 302 $redirect_uri;
}
...
}
我花了一段时间才明白为什么一个网站的别名会使用不同网站的重定向表:因为所有这些都包含在同一范围内,所以每个都map
重新定义了$redirect_uri
变量!
理想情况下,我希望将每个变量都放在将要使用它map
的范围内,但 nginx 会抱怨。我发现的解决方法是为每个映射变量赋予不同的名称,但这是手动的并且容易出错。server
"map" directive is not allowed here in <file>
结论:如何将单独的重定向映射保持在将使用它们的服务器范围内?