add_header not allowed in server if blocks?

steveh nginx-forum at nginx.us
Tue Jun 15 03:04:21 MSD 2010


I'm trying to add support for google chrome frame to our nginx config the simple way would be to include a fragment in each server block which looks something like:
[code]
    if ( $http_user_agent ~ chromeframe ) {
        add_header X-UA-Compatible "chrome=1";
    }
[/code]

The problem is for some reason add_header isn't allowed in server-if blocks on location-if blocks. I can't see or think of a reason why this shouldn't be allowed?

So I tried adding it and it seems to work without a problem. The following patch, made against 0.8.40, adds server if block support for both expires and add_header.

[code]
--- src/http/modules/ngx_http_headers_filter_module.c.orig  2010-06-14 23:48:58.000000000 +0100
+++ src/http/modules/ngx_http_headers_filter_module.c   2010-06-14 23:49:27.000000000 +0100
@@ -79,7 +79,7 @@

     { ngx_string("expires"),
       NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
-                        |NGX_CONF_TAKE12,
+                        |NGX_HTTP_SIF_CONF|NGX_CONF_TAKE12,
       ngx_http_headers_expires,
       NGX_HTTP_LOC_CONF_OFFSET,
       0,
@@ -87,7 +87,7 @@

     { ngx_string("add_header"),
       NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
-                        |NGX_CONF_TAKE2,
+                        |NGX_HTTP_SIF_CONF|NGX_CONF_TAKE2,
       ngx_http_headers_add,
       NGX_HTTP_LOC_CONF_OFFSET,
       0,
[/code]

Posted at Nginx Forum: http://forum.nginx.org/read.php?2,98202,98202#msg-98202




More information about the nginx mailing list