Ruby Forum NGINX > Is this proxy setup realizable?

Posted by Samuel Vogel (Guest)
on 19.08.2008 01:13
(Received via mailing list)
Hey guys,

I am planning on using nginx to be a reverse proxy infront of more than
ten real servers, each containing 10 virtual machines. These virtual
machines all contain the same setup lamp setup hosting about a 100
users/domains each.
This means as a total we have about 10.000 domains. As we provide low
cost shared hosting on low cost servers, we can not switch the ip of a
virtual machine between servers. So when we migrate a VM to a different
physical server because of load reasons, it's IP changes as well.

This is why we would like to use nginx infront as a reverse proxy. It
would then always know the corresponding IP for a virtual machine and
reroute the requests.

With my current knowledge of nginx I would setup a virtual host for
every VM we have and add all the domains it contains into the
server_name variable. This would mean 100 virtual host with very long
server_names, each containing 100 domains.

Additionally I would like to use the reverse proxy setup to sanitize the
requests, protect the VMs from dos attacks and if a VM goes down route
all requests to this VM to a static file like "we'll be back soon".

My question is, would this configuration be maintainable with nginx? Can
it cope with long server_names and a rather strange setup like this? Or
will it degrade my performance too much?

Thanks for your answers!

Regards,
Samy
Posted by Igor Sysoev (Guest)
on 19.08.2008 13:31
(Received via mailing list)
On Tue, Aug 19, 2008 at 01:05:33AM +0200, Samuel Vogel wrote:

> would then always know the corresponding IP for a virtual machine and 
>
> My question is, would this configuration be maintainable with nginx? Can 
> it cope with long server_names and a rather strange setup like this? Or 
> will it degrade my performance too much?

nginx searchs server names via hash, so it will be quick opration.
nginx does primitive only sanitize.
As to "we'll be back soon", you need to use

     error_page  502 504  /back.html;
Posted by Samuel Vogel (Guest)
on 20.08.2008 01:28
(Received via mailing list)
Igor Sysoev schrieb:
>>
>> requests, protect the VMs from dos attacks and if a VM goes down route 
>
>      error_page  502 504  /back.html;
>   

Great! So even more than 10.000 domains would not matter and there is no
size limit to server_name?

As for the "we'll be back soon" page, I thought I'd put the real server
(VM) and a server only containing this error page into an upstream
section and mark the error page server as backup.
But if the 502 and 504 errors achieve the same effect, this makes things
easier!

Greatly appreciate it,
Samy
Posted by Igor Sysoev (Guest)
on 20.08.2008 06:33
(Received via mailing list)
On Wed, Aug 20, 2008 at 01:18:05AM +0200, Samuel Vogel wrote:

> >>physical server because of load reasons, it's IP changes as well.
> >>Additionally I would like to use the reverse proxy setup to sanitize the 
> >As to "we'll be back soon", you need to use
> >
> >     error_page  502 504  /back.html;
> >  
> 
> Great! So even more than 10.000 domains would not matter and there is no 
> size limit to server_name?

No limit, however, you should increase server_names_hash_max_size
and, probably, server_names_hash_bucket_size. nginx will say by itself.
First you should increase server_names_hash_max_sizeand only.

A large number of server_name may cause reconfiguraiton delay as nginx
finds the best hash size, but in run-time the will no delay.

> As for the "we'll be back soon" page, I thought I'd put the real server 
> (VM) and a server only containing this error page into an upstream 
> section and mark the error page server as backup.
> But if the 502 and 504 errors achieve the same effect, this makes things 
> easier!

However, you still need to add

   location = /we_ll_be_back_soon.html {
       root  /path/to/thepage;
   }

in every server. The

      error_page  502 504  /we_ll_be_back_soon.html;

can be set on http level.
Posted by Samuel Vogel (Guest)
on 20.08.2008 21:06
(Received via mailing list)
Thanks!
I greatly appreciate it. And it also makes me feel very confident about
nginx, that the main developer actually answers questions that come up
on the mailing list!

Regards,
Samy