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