Disable keep_alive based on specific useragent

Robert Mueller robm at fastmail.fm
Tue Nov 18 04:25:19 UTC 2014


Thanks for your responses. Unfortunately, they don't seem to work.

> and then use the evil IF:
> if ($ios_ua) { keepalive_timout 0; }

This doesn't appear to work.

if ($http_user_agent ~ "^iOS/8\.") { keepalive_timeout 0; }

nginx: [emerg] "keepalive_timeout" directive is not allowed here
in nginx-http.conf:753 nginx: configuration file nginx-http.conf
test failed

If I do:

# if ($http_user_agent ~ "^iOS/8\.") { keepalive_timeout 0; # }

e.g. comment out the "if" block part, it works fine, but obviously
     disabled keepalive for all requests. So it appears you can't set
     keepalive_timeout in an "if" block.

> I would do even better by avoiding using 'if' at all:
> map $http_user_agent $keepalive_timeout { default 75s; # Put here the
> wanted default value (taken from keepalive_timeout[1] docs) *regex* 0;
> *for* 0; *blacklisted* 0; *user agents* 0 }
> keepalive_timeout $keepalive_timeout; # At http, server or location
> level, as docs state

This doesn't seem to work either:

map $http_user_agent $katimeout { default 300s; }

keepalive_timeout $katimeout;

nginx: [emerg] "keepalive_timeout" directive invalid value in
nginx-http.conf:53 nginx: configuration file nginx-http.conf test failed

Looks like the value can't be a variable?



  1. http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx/attachments/20141118/fee656ce/attachment-0001.html>

More information about the nginx mailing list