Chapter 4
[ 79 ]
If a client should always get the same upstream server, to effect a poor-man's session-
stickiness, the ip_hash directive should be used. When the distribution of requests
leads to widely varying response times per request, the least_conn algorithm
should be selected. The default round-robin algorithm is good for a general case
where no special consideration of either the client or upstream server is required.
Non-HTTP upstream servers
So far, we've focused on communicating with upstream servers over HTTP. For this,
we use the proxy_pass directive. As hinted at earlier in this chapter, in the Keepalive
connections section, NGINX can proxy requests to a number of different kinds of
upstream servers. Each has its corresponding *_pass directive.
Memcached upstream servers
The memcached NGINX module (enabled by default) is responsible for communicating
with a memcached daemon. As such, there is no direct communication between the
client and the memcached daemon; that is, NGINX does not act as a reverse-proxy in
this sense. The memcached module enables NGINX to speak the memcached protocol,
so that a key lookup can be done before a request is passed to an application server:
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;
}