我正在使用 nginx 版本 1.4.6。
我上班时遇到了麻烦map
。我遇到了以下情况:
http {
map $arg_f $forum {
default 0;
1 2;
}
# ...
server {
# ...
location = /old.php {
if ($forum) {
return 301 /forums/$forum/;
}
return 494;
}
# ...
}
# ...
}
以下是我得到的结果nginx -t
:
nginx: [emerg] unknown "forum" variable
目标是将旧 URI 映射到新 URI。问题是一些数字论坛 ID 已更改。我想在 Nginx 中处理这个问题,所以如果没有其他简单的方法,我愿意求助于 lua。只要它们优雅,我愿意接受其他解决方案,但我想知道为什么map
在这里不起作用。是不是因为重写模块不查询映射,至少在 1.4 中是这样?
答案1
我刚刚使用 nginx v1.4.7 测试了以下最小配置:
events {
worker_connections 1024;
}
http {
map $arg_f $forum {
default 0;
1 2;
}
server {
location = /old.php {
default_type text/html;
if ($forum) {
return 200 "OK";
}
return 200 "KO";
}
}
}
它运行完美,所以导致你遇到问题的最可能原因是你的配置没有正确应用。我猜你在添加指令方面所做的更改map
破坏了它,导致forum
变量不存在。
尝试:
- 用于
nginx -t
验证您的配置 - 在发出时监视错误日志文件,
service nginx reload
以捕获运行时可能发生的任何在配置时无法检测到的错误。
附注:请记住使用最新的产品始终是一个好主意。
答案2
出现这种行为的可能原因是nginx -t
重新启动之前不会加载变量,并且无法检查是否可以安全使用它,从而导致出现unknown "x" variable
错误消息。
解决方案是先添加地图并重新启动 Nginx,然后尝试使用它并测试更改nginx -t
。