2015-04-06 43 views
19

如何在nginx(1.4.6 ubuntu)配置中有条件地添加标题?如何在nginx配置中有条件地添加标题?

起初我是这样试过的。

location/{ 
     add_header X-TEST-0 always-0; 

     set $true 1; 
     if ($true) { 
      add_header X-TEST-1 only-true; 
     } 

     add_header X-TEST-2 always-2; 
    }  

尽管我期望我的nginx设置所有头(X-TEST-0,1,2),它只添加了头X-TEST-1。

接下来我试着这样。

location/{ 
     add_header X-TEST-0 always-0; 

     ##set $true 1; 
     ##if ($true) { 
     ## add_header X-TEST-1 only-true; 
     ##} 

     add_header X-TEST-2 always-2; 
    }  

我nginx的加入报头X-TEST-1和X-TEST-2作为我的预期。

我quastions是...

  1. 如何添加页眉条件?

  2. 为什么nginx只在上面的第一个例子中添加X-TEST-1?

在此先感谢!

+0

这是从[如果是恶](http://wiki.nginx.org/IfIsEvil一个典型的例子) – 2015-04-06 11:01:49

+1

你可以在'if'里面使用'set'。或者使用'map'指令。 – 2015-04-06 11:03:15

+0

感谢您的信息!我可以在您链接的页面中获得所需的全部内容。 – yazaki 2015-04-07 01:05:45

回答

0

(我会写这个结论的人谁都会有相同的问题,在未来的感谢@Alexey十的信息。)

结论:

不要使用任何非if指令中的-rewrite指令。因为if指令本质上是重写模块的一部分。

我们可以在名为IfIsEvil的官方文档中获得关于它的更多详细信息。

+2

这不是回答关于如何实现有条件的add_header的问题... – Unicornist 2015-09-05 08:29:47

+2

这不是答案,这个问题的需求很大。 – siddhusingh 2015-10-30 06:10:13

+1

@siddhusingh如果这个问题的需求量很大,那么为什么你没有投票呢?! – Unicornist 2015-11-11 11:44:15

3

我用lua nginx module解决类似的问题:

localtion/{ 
    header_filter_by_lua_block { 
    ngx.header["X-TEST-0"] = "always-0"; 
    # example of conditional header 
    if ngx.req.get_method() == ngx.HTTP_POST { 
     ngx.header["X-TEST-1"] = "only if POST request"; 
    } 
    ngx.header["X-TEST-2"] = "always-2"; 
    } 
}  

https://github.com/openresty/lua-nginx-module#header_filter_by_lua_block ```

+0

感谢您提供有用的信息。对于不介意使用不是nginx标准的模块的nginx用户来说,这可能是一个解决方案。我投了+1。 – yazaki 2015-12-16 00:06:24

相关问题