Esto en la práctica se traduce a que puede ser un servidor Apache configurado para solo servir peticiones específicas por un puerto TCP o puede ser un middleware que interpreta Ruby para una aplicación de Rails. Por ende Nginx puede manejar las peticiones iniciales y ser el reverse proxy de los servicios.
Servidores Upstream Únicos
Son servidores que tienen un único punto de subida como lo indica su nombre, un ejemplo de esto puede ser el servidor Apache, el cual en la mayoría de las configuraciones que encontramos no está optimizado para servir múltiples conexiones simultaneas, ya que al recargarse con los módulos de servir archivos estáticos, baja su efectividad.
Aquí entra Nginx quien se encarga de administrar las múltiples conexiones y de esta manera solo pasar a Apache los archivos que realmente este debe interpretar, como por ejemplo archivos de PHP.
Una configuración básica podría ser la siguiente:
Lo que vemos en la imagen es una configuración donde Nginx pasa directamente las peticiones a Apache, optimizando la finalización de las conexiones, sin embargo esto no es tan óptimo como la configuración que veremos en la siguiente imagen, donde le decimos a Nginx que sirva los archivos estáticos y los que no lo sean pasarlos a Apache, con esto si se logra una mayor diferencia en rendimiento:
Múltiples Servidores Upstream
Nginx también está en la capacidad de poder trabajar con varios servidores upstreams en caso que el servicio para el cual haga de reverse proxy solo pueda manejar pocas conexiones, evitando de esta forma que haya una sobrecarga en los mismos.
Vemos como definimos tres servidores en un bloque upstream llamado app, luego en nuestro bloque server hacemos un proxy_pass al bloque app, lo que va a hacer Nginx es utilizar el esquema de round robin para ir sirviendo las peticiones a los tres servidores upstream que definimos, logrando de esta manera el objetivo; Adicionalmente, Nginx también puede manejar otros algoritmos de balanceo de carga.
Finalizando este tutorial vemos una vez más como Nginx tiene capacidades que lo hacen ser una opción bastante viable en entornos de alta carga de peticiones.