map module - mass hosting

Maxim Dounin mdounin at mdounin.ru
Wed Apr 23 12:44:59 UTC 2014


Hello!

On Wed, Apr 23, 2014 at 08:07:42AM -0400, beatnut wrote:

> I'd like to use map module for my vhost configuration to setup user name in
> root or fastcgi_pass parameter.
> 
> At this point i've 300 domains configured and my config look like this:
> 
> http
> {
>        server {
>        ..........
>     root /home/someuser;

[...]

> I'd like to replace this model by using map module like this
> 
> 
> http
> {
> 
> #map with about 300 domains
> 
> map $http_host $username {
> example.com someuser;
> escample2.com someuser2;
> .......
> }
> 
>        server {
>        ..........
>         root /home/$username;

[...]

> My question is -  Is this a good idea to use map like this ? Every request
> needs to find out username by $http_host searching through few hundreds of
> domains.  Maybe i'm wrong   but it can slow down request processing
> significantly.
> Any suggestions ?

Searching within a map is basically identical to searching for 
appropriate server{} block, both use the same internal mechanism 
(ngx_hash).  As long as you don't use regular expressions,
lookup complexity is O(1).

Distinct server{} blocks might be more CPU-efficient due to no need to 
evaluate variables and dynamically allocate memory for resulting 
strings on each request.

On the other hand, multiple server{} blocks consume memory for 
each server's configuration, and map{} approach may be more 
effective if there are many mostly identical server{} blocks.

-- 
Maxim Dounin
http://nginx.org/



More information about the nginx mailing list