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