Nginx. Héritage de la directive serveur.

9

Existe-t-il un moyen de réduire la construction comme:

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;
  } 
} 

à

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;
  } 
} 

Tous les autres conseils pour se débarrasser de la section api sont les bienvenus.

Nikolay Fominyh
la source
Veuillez prendre un moment pour lire notre FAQ. Votre question me semble hors sujet pour ce site.
HopelessN00b
@ HopelessN00b, oui, on dirait que c'est hors sujet. Mais ici, nous avons 3000 questions sur nginx, ce qui est étrange dans ce cas. Je suis sûr que cette question n'est pas pour stackoverflow.
Nikolay Fominyh

Réponses:

13

Vous pourriez le faire assez facilement avec une includedéclaration.

/etc/nginx/conf/api_defaults.conf

location /api/ { 
  proxy_pass 127.0.0.1:5000;
}    

Puis dans votre vhostconfiguration principale .

/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
la source
C'est ce que je pensais également, en d'autres termes, les blocs de localisation ne sont pas hérités des blocs serveur. C'est différent de la façon dont Apache le fait, où vous pouvez avoir des emplacements définis en dehors des hôtes virtuels, qui sont hérités par tous les hôtes virtuels. Avec Nginx, vous devez inclure explicitement les configurations courantes, dans chaque bloc serveur.
JM Becker