Nginx. Herencia directiva del servidor.

9

¿Hay alguna manera de reducir la construcción como:

server { 
  server_name regular_site; 
  location /api/ { 
     proxy_pass 127.0.0.1:5000;
  } 
  location / { 
     proxy_pass 127.0.0.1:3000;
  } 
} 

server { 
  server_name mobile_site; 
  location /api/ { 
     proxy_pass 127.0.0.1:5000;
  } 
  location / { 
     proxy_pass 127.0.0.1:3001;
  } 
} 

a

server api { 
  location /api/ { 
     proxy_pass 127.0.0.1:5000;
  } 
}

server extends api { 
  server_name regular_site;
  location / { 
     proxy_pass 127.0.0.1:3000;
  } 
} 

server extends api { 
  server_name mobile_site;
  location / { 
     proxy_pass 127.0.0.1:3001;
  } 
} 

Cualquier otro consejo para deshacerse de la sección de API es bienvenido.

Nikolay Fominyh
fuente
Tómese un momento para leer nuestras preguntas frecuentes. Su pregunta me parece fuera de tema para este sitio.
HopelessN00b
@ HopelessN00b, sí, parece que está fuera del tema. Pero aquí tenemos 3000 preguntas sobre nginx, lo cual es extraño en este caso. Estoy seguro de que esta pregunta no es para stackoverflow.
Nikolay Fominyh

Respuestas:

13

Podrías hacerlo con bastante facilidad con una includedeclaración.

/etc/nginx/conf/api_defaults.conf

location /api/ { 
  proxy_pass 127.0.0.1:5000;
}    

Luego en su vhostconfiguración principal .

/etc/nginx/sites-enabled/my_new_api.conf

server my_new_api {  
  server_name mobile_site;

  include "/etc/nginx/conf/api_defaults.conf";

  location / { 
    proxy_pass 127.0.0.1:3001;
  }         
}
Ben Lessani - Sonassi
fuente
Eso es lo que pensé también, en otras palabras, los bloques de ubicación no se heredan de los bloques del servidor. Esto es diferente a cómo lo hace Apache, donde puede tener ubicaciones definidas fuera de los hosts virtuales, que son heredados por todos los hosts virtuales. Con Nginx debe incluir explícitamente las configuraciones comunes, en cada bloque de servidor.
JM Becker