Nginx & Apache
Working with virtual servers (like OpenVZ containers or XEN dom's) you might need a load balancing or a proxy solution to be able to run services from inside those machines through your host's single public IP address.
Here you will find how to solve such a situation using Nginx and Apache. (Apache already has mod_proxy module which can be used instead of Nginx, but the second one is much lighter and scalable, so I recommend you using it.)
Note: This tutorial assumes you already have a working environment like the one described above.
Nginx Installation
Just use your favorite package manager and install nginx package:
sudo apt-get install nginx
Warning Hardy users! In order to have SSL support please refer to the solution described in bug #395637.
Nginx configuration for proxy behavior
Nginx uses the following directives (as an example) in it's configuration files to behave like a proxy:
proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffers 32 4k;
Create the file /etc/nginx/proxy.conf containing all the informations above. We will include this file in every nginx vhost we need to be a proxy.
Nginx vhost proxy example
Create an nginx vhost by creating a file inside /etc/nginx/sites-enabled/ like this:
server { listen 80; server_name foo.bar.no foo.bar.yes foo.bar.ok; access_log /var/log/nginx/access.log; location / { proxy_pass http://172.27.0.2/; include /etc/nginx/proxy.conf; } }
The example above will be a proxy for every domain listed with server_name, and the server which will be used for proxy is under proxy_pass directive.
Done with nginx. Reload it:
invoke-rc.d nginx reload
Apache configuration
This assumes you are working on a machine behind the host that uses nginx as a proxy ( an OpenVZ container, XEN dom or a machine inside your network which is connected to the host we installed Nginx before)
Apache to use proxy
Apache will doesn't know who connects to it except the host ip address we set up nginx. To repair this, we need to install Apache's mod_rpaf. Use your favorite package manager to install libapache2-mod-rpaf:
sudo apt-get install libapache2-mod-rpaf
mod_rpaf requires the following directives inside a vhost to work:
<IfModule mod_rpaf.c> RPAFenable On RPAFsethostname On RPAFproxy_ips 172.27.0.1 </IfModule>
Where RPAFproxy_ips can be multiple IP addresses, one of which is our Nginx proxy private IP address.