Upstream module directives


ip_hash

Ensures the distribution of connecting clients evenly over

all servers by hashing the IP address, keying on its class-C

network.

keepalive

The number of connections to upstream servers that

are cached per worker process. When used with HTTP

connections, proxy_http_version should be set to 1.1

and proxy_set_header to Connection "".

least_conn

Activates the load-balancing algorithm where the server

with the least number of active connections is chosen for

the next new connection.

server

Defines an address (domain name or IP address with an

optional TCP port, or path to a UNIX-domain socket)

and optional parameters for an upstream server. The

parameters are:

     weight: It sets the preference for one server over

    another

     max_fails: It is the maximum number of

    unsuccessful communication attempts to a server

    within fail_timeout before the server is marked

    as down

     fail_timeout: It is the length of time a server

    has to respond to a request and the length of time

    a server will be marked as down

     backup: It will only receive requests once the

    other servers are down

     down: It marks a server as not able to

    process requests


The  keepalive directive deserves special mention. NGINX will keep this number of

connections per worker open to an upstream server


Memcached upstream servers


    upstream memcaches {

    server 10.0.100.10:11211;

    server 10.0.100.20:11211;

    }

    server {

    location / {

    set  $memcached_key "$uri?$args";

    memcached_pass  memcaches;

    error_page 404 = @appserver;

    }

    location @appserver {

    proxy_pass http://127.0.0.1:8080;

    }

    }


The  memcached_pass directive uses the  $memcached_key variable to make the key

lookup. If there is no corresponding value ( error_page 404 ), we pass the request

on to  localhost , where there is presumably a server running that will handle this

request and insert a key/value pair into the  memcached instance


Determining the client's real IP address


proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;