La aplicación Rails (4.2) está alojada en nginx y sirve en localhost:5478. El ip_hash en el fragmento de código a continuación mantiene la consistencia de la respuesta a la solicitud del servidor y funciona como se esperaba.
upstream rails { ip_hash;Para compartir la carga, se comentó ip_hash. Ahora el inicio de sesión para el usuario comienza a fallar ya que se requiere pasar la cookie de sesión mientras funciona de manera similar para Rails3. Esto está relacionado con algo relacionado con la sesión fija, pero no se puede rastrear la forma exacta de manejarlo.
nginx.conf
upstream mongrel { server 127.0.0.1:5469; } upstream rails { #ip_hash; server 127.0.0.1:5479; server 127.0.0.1:5480; server 127.0.0.1:5481; server 127.0.0.1:5482; } location / { # Setup redirection headers proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; # Pass the request thru proxy_pass http://mongrel; } } server { listen 5478 default; server_name _; root "../games/public"; location ~ ^/assets/ { root "../d2/public"; expires 1y; add_header Cache-Control public; add_header ETag ""; break; } Intenté usar consistent_hash $scheme $request_uri; como se sugiere, pero consistente_hash como directiva no se reconoce y falla. Avíseme si se requiere algún cambio de configuración para nginx. También encontré la misma configuración de nginx con trabajos comentados de ip_hash para la aplicación Rails3, no estoy seguro si esto está relacionado
Hay dos formas de hacer esto, ya sea:
Avíseme si se requiere algún cambio de configuración para nginx.
si no puede modificar la aplicación, por ejemplo, permitir que varias instancias de la aplicación usen un almacenamiento común, puede intentar usar la directiva sticky de nginx (>=1.5.7).
Usando tu ejemplo, debería ser algo como
http { ... upstream rails { server 127.0.0.1:5479; server 127.0.0.1:5480; server 127.0.0.1:5481; server 127.0.0.1:5482; sticky rails_sticky expires=1d domain=.rails.local path=/ httponly secure; } ... server { listen 5478; server_name rails.local; root "../games/public"; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://rails; } ... } ... }
Es posible que deba ajustar su configuración de acuerdo con su entorno.
Usando sticky , nginx debe verificar y enlazar un cliente usando una cookie adhesiva llamada rails_sticky , si aún no está enlazada. La vinculación de un cliente aún verifica cualquier método de equilibrio que establezca en la directiva upstream , round-robin ponderado de forma predeterminada.
Si el cliente se ha vinculado a un servidor, cualquier solicitud posterior se reenviará al servidor ascendente designado. En caso de que no se pueda usar el servidor ascendente designado, nginx volverá a vincular el cliente a otro servidor.