Nginx. Herança de diretiva de servidor.

9

Existe alguma maneira de reduzir a construção 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;
  } 
} 

para

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

Quaisquer outros conselhos para se livrar da seção API são bem-vindos.

Nikolay Fominyh
fonte
Reserve um momento para ler nossas Perguntas frequentes. Sua pergunta parece fora do tópico para este site para mim.
HopelessN00b
@ HopelessN00b, sim, parece que é offtopic. Mas aqui temos 3000 perguntas sobre o nginx, o que é estranho neste caso. Tenho certeza de que esta questão não é para stackoverflow.
Nikolay Fominyh

Respostas:

13

Você poderia fazer isso facilmente com uma includedeclaração.

/etc/nginx/conf/api_defaults.conf

location /api/ { 
  proxy_pass 127.0.0.1:5000;
}    

Então na sua vhostconfiguração 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
fonte
Foi o que pensei também, em outras palavras, os blocos de localização não são herdados para os blocos de servidor. Isso é diferente do Apache, onde você pode ter locais definidos fora dos virtualhosts, que são herdados por todos os virtualhosts. Com o Nginx, você deve incluir explicitamente as configurações comuns, em cada bloco do servidor.
JM Becker