Setting variable and using HttpSubModule

Maxim Dounin mdounin at mdounin.ru
Sat Jun 25 23:59:35 MSD 2011


Hello!

On Sat, Jun 25, 2011 at 12:39:19PM -0400, Jim Ohlstein wrote:

> I'm trying to insert google analytics code into an app by using the
> directions at http://wiki.nginx.org/HttpSubModule.
> 
> In so doing, I first tried to set a variable as follows:
> 
> set $analytics = "var _gaq = _gaq || [];  _gaq.push(['_setAccount',
> 'UA-xxxxxx-xx']);   _gaq.push(['_trackPageview']);  (function() {    var
> ga = document.createElement('script'); ga.type = 'text/javascript';
> ga.async = true;    ga.src = ('https:' == document.location.protocol ?
> 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';    var s
> = document.getElementsByTagName('script')[0];
> s.parentNode.insertBefore(ga, s);  })();";
> 
> to get the text into the variable but of course that generates an error:
> 
> nginx: [emerg] invalid number of arguments in "set" directive in
> /usr/local/etc/nginx/sites-enabled/mysite.com:12.

Syntax is

    set $variable "value";

Using "=" is a syntax error.

http://wiki.nginx.org/HttpRewriteModule#set

> Searching Google I found a few threads about trying to place the
> contents of a file into a variable but there didn't seem to be a way.
> 
> I also tried simply adding the text into the "sub_filter" line but that
> also threw an error:
> 
> nginx: [emerg] unexpected "_" in
> /usr/local/etc/nginx/sites-enabled/mysite.com:16

Probably some other syntax error.  Please make sure you've quoted 
text properly.

Somthing like this works fine here:

sub_filter "</head>"
"<script>
var _gaq = _gaq || [];

_gaq.push(['_setAccount', 'UA-xxxxxx-xx']);
_gaq.push(['_trackPageview']);

(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
})();
</script></head>";

> 
> Using the following:
> 
> server {
>   ...
> 
>   sub_filter      </head>
>   '</head><script language="javascript" src=/home/jim/ga.js></script>';
>   sub_filter_once on;
> 
>   ...
> }
> 
> resulted in the following:
> 
> jim$ curl http://mysite.com/somepage
> 
> ...
> </head><script language="javascript" src=/home/jim/ga.js></script>
> ...
> 
> Putting the path in quotes changed nothing other than that portion being
> in quotes.

There result is exactly as configured, it's not clear what you expect here.

Maxim Dounin



More information about the nginx mailing list