Estoy tratando de empaquetar 2 aplicaciones que usan nginx como proxy y entregar cada una un archivo de configuración en /etc/nginx/conf.d/
.
Hacer esto en un archivo ( combined.conf
) funciona muy bien:
upstream backend1 {
http://localhost:8989;
}
upstream backend2 {
http://localhost:8990;
}
server {
location /backend1/ {
proxy_pass http://backend1;
}
location /backend2/ {
proxy_pass http://backend2;
}
Sin embargo, cuando se divide en 2 archivos, uno de los redireccionamientos falla sistemáticamente:
backend1.conf
:upstream backend1 { http://localhost:8989; } server { location /backend1/ { proxy_pass http://backend1; }
backend2.conf
:upstream backend2 { http://localhost:8990; } server { location /backend2/ { proxy_pass http://backend2; }
Entonces mi pregunta es: ¿puede un http
nodo tener 2 server
hijos diferentes ?
La documentación de Nginx no dice nada al respecto.
Sin embargo, otras personas parecen haber tenido éxito con este tipo de arquitectura :(
La versión de Nginx es 1.1.19-1ubuntu0.1.
Gracias por cualquier consejo!
Respuestas:
Después de tanto ruido y pruebas, descubrí una forma de hacerlo funcionar y poder enviar un archivo de configuración por aplicación.
Aquí está, enviado en un archivo común y un par de archivos ascendentes / de ubicación por aplicación:
/etc/nginx/conf.d/common-proxies.conf
:/etc/nginx/locations/backend1.conf
/etc/nginx/locations/backend2.conf
/etc/nginx/upstreams/backend1.conf
/etc/nginx/upstreams/backend2.conf
fuente
upstream backend { server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; }
. Además, esto funciona con el;
:)Un bloque http puede tener muchos servidores secundarios. Sin embargo, nginx selecciona un bloque de servidor para procesar una solicitud. Por lo tanto, la solicitud nunca "ve" la ubicación del backend2 porque coincide con el primer bloque del servidor.
fuente
location
directiva la que apesta y toma la solicitud destinada para backend2?server
bloques cuando nginx busca el apropiadoserver
para reenviar la solicitud?