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
on 19.08.2008 01:13
on 19.08.2008 13:31
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;
on 20.08.2008 01:28
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
on 20.08.2008 06:33
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.
on 20.08.2008 21:06
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