我刚刚遇到了一些奇怪的事情,无法解释,甚至无法在其他服务器上重现——由于某种原因,嵌入式变量 $arg_timestamp 丢失。
服务器配置:
server {
server_name _;
listen 80;
location /{
add_header X-foo $args;
add_header X-bar $arg_timestamp;
add_header X-bar $arg_timestam;
return 204;
}
}
和一些测试
ogryzek% curl -D - -s 'http://fqdn/?timestamp=3'
HTTP/1.1 204 No Content
Server: nginx/1.6.2
Date: Sun, 21 May 2017 22:47:34 GMT
Connection: keep-alive
Keep-Alive: timeout=20
X-foo: timestamp=3
ogryzek% curl -D - -s 'http://fqdn/?timestam=3'
HTTP/1.1 204 No Content
Server: nginx/1.6.2
Date: Sun, 21 May 2017 22:47:56 GMT
Connection: keep-alive
Keep-Alive: timeout=20
X-foo: timestam=3
X-bar: 3
答案1
我找到了问题的原因 -if 是邪恶的
其他vhost之一有
if ($args ~* "(.*)timestamp=([0-9]{7})([0-9]{3})($|\&.*)" ) {
set $arg_timestamp $2000;
}