Map 指令不起作用:未知变量

Map 指令不起作用:未知变量

我正在使用 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变量不存在。

尝试:

  1. 用于nginx -t验证您的配置
  2. 在发出时监视错误日志文件,service nginx reload以捕获运行时可能发生的任何在配置时无法检测到的错误。

附注:请记住使用最新的产品始终是一个好主意。

http://nginx.org/en/download.html

答案2

出现这种行为的可能原因是nginx -t重新启动之前不会加载变量,并且无法检查是否可以安全使用它,从而导致出现unknown "x" variable错误消息。

解决方案是先添加地图并重新启动 Nginx,然后尝试使用它并测试更改nginx -t

相关内容