
Tengo Nginx configurado como un equilibrio de carga de proxy inverso entre dos contenedores acoplables que se ejecutan todos en el mismo servidor. Cuando cargo una página por primera vez, la página se carga pero recibo muchos errores 404 para todos los archivos css y js:
Al actualizar o abrir una segunda pestaña, todos estos errores desaparecen y la página se carga bien. Cuando lo reduzco a servir solo un recipiente, también funciona bien.
Inicialmente pensé que esto se debía a que js y css se solicitaban desde la misma URL raíz, y algún aspecto de los balanceadores de carga y contenedores arrojaba errores ya que un grupo de solicitudes para un solo usuario se equilibraba entre los dos servidores. A través de un poco de experimentación he intentado usar proxy_set_header Host $host
(mirandoaquíyaquípara obtener respuestas): tengo entendido que esto debería enviar las solicitudes posteriores de un solo usuario al mismo servidor ascendente. Esto pareció hacer que el problema ocurriera con menos frecuencia, pero no lo eliminó por completo.
Mis preguntas restantes (¡de un aficionado al aprendizaje!):
- ¿Es este el uso correcto de
proxy_set_header
y, por lo tanto, es posible servir js/css desde el mismo servidor ascendente a un solo usuario, en lugar de equilibrar la carga de estas solicitudes relativamente menores entre dos servidores? - ¿Es esta la probable raíz del problema, que dado que el segundo contenedor tiene que responder a algunas de las solicitudes generadas al cargar la página para el primer contenedor, estas respuestas de alguna manera no están alineadas?
- Mi base de usuarios sería de 100 a 200 usuarios que acceden simultáneamente a una URL remota desde una única ubicación. No creo que
ip_hash
funcione, ya que todas las solicitudes provendrían de la misma IP. ¿Existen otras formas de vincular de manera más eficiente a un solo usuario a un solo servidor?
Mi archivo de configuración de nginx:
upstream backend {
least_conn;
server localhost:4000;
server localhost:4001;
}
server {
listen 80;
listen [::]:80;
server_name xxxxxxxxxx;
location / {
proxy_pass http://backend;
proxy_redirect http://backend/ $scheme://$host/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 20d;
proxy_buffering off;
}
}