此处不允许使用“set”指令

Posted

技术标签:

【中文标题】此处不允许使用“set”指令【英文标题】:"set" directive is not allowed here 【发布时间】:2015-01-08 14:07:11 【问题描述】:

我在这里尝试遵循此示例-https://gist.github.com/morhekil/1ff0e902ed4de2adcb7a#file-nginx-conf 但出现错误-"set" directive is not allowed here

我做错了什么?请注意,我正在使用 openresty 并调用 nginx as-

nginx -p `pwd`/ -c conf/nginx.conf 

我的 nginx.conf 的上下文完全匹配 https://gist.github.com/morhekil/1ff0e902ed4de2adcb7a#file-nginx-conf

如果我将 set 变量移动到服务器部分,我将不再收到该错误,而是一个新错误-

nginx: [emerg] unknown "resp_body" variable

【问题讨论】:

【参考方案1】:

几个月后,答案即将到来:)

Github 配置文件似乎错误。 set 指令用于 serverlocationif 块。

语法:设置$变量值; 默认值:- 上下文:服务器,位置,如果

http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#set

祝你好运!

【讨论】:

话虽这么说......不建议在 if-blocks 中使用“set”,因为它可能会产生副作用。关于它的文章在这里“如果是邪恶的”nginx.com/resources/wiki/start/topics/depth/ifisevil。我正试图了解这个人的 sn-p 是如何工作的:github.com/czerasz/nginx-configuration-examples/blob/develop/…。注意到第 1 行了吗?该代码甚至如何运行,配置将失败!想知道旧版本的 nginx 是否可以在***上下文中运行 set【参考方案2】:

我需要一个变量[全局]设置一次,并且它的值可以在每个服务器块中访问。 map 指令适用于我的情况,例如:

map $host $path_to_trunk 
  default "/Users/ruter/Sites/example.co/trunk";

使用上面的map 块,我可以访问每个服务器块中的$path_to_trunk,例如:

server 
    server_name www.example.local;
    root $path_to_trunk/www;


server 
    server_name cdn.example.local;
    root $path_to_trunk/www/images/content;

【讨论】:

以上是关于此处不允许使用“set”指令的主要内容,如果未能解决你的问题,请参考以下文章

nginx map 指令:为啥只允许在 http 级别?

此处不允许使用 Maven Jetty 插件守护程序元素

此处不允许使用 Oracle 列默认值 [重复]

ORA-00934: 此处不允许使用组功能

此处不允许使用群组功能

ORA-00934: 尝试使用 UPDATE 时,此处不允许使用组功能