此处不允许使用“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
指令用于 server
、location
和 if
块。
语法:设置$变量值; 默认值:- 上下文:服务器,位置,如果
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”指令的主要内容,如果未能解决你的问题,请参考以下文章