Nginx. Наследование директив сервера.

9

Есть ли способ уменьшить строительство, как:

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

Любые другие советы по избавлению от раздела API приветствуются.

Николай Фоминых
источник
Пожалуйста, найдите время, чтобы прочитать наш FAQ. Ваш вопрос кажется мне не по теме для этого сайта.
HopelessN00b
@ HopelessN00b, да, похоже, это оффтоп. Но здесь у нас есть 3000 вопросов о nginx, что странно в этом случае. Я уверен, что этот вопрос не для stackoverflow.
Николай Фоминых

Ответы:

13

Вы можете сделать это довольно легко с помощью includeзаявления.

/etc/nginx/conf/api_defaults.conf

location /api/ { 
  proxy_pass 127.0.0.1:5000;
}    

Тогда в вашем основном vhostконфиге.

/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;
  }         
}
Бен Лессани - Сонасси
источник
Я тоже так думал, другими словами, блоки местоположения не наследуются блокам сервера. Это не похоже на то, как это делает Apache, когда у вас могут быть местоположения, определенные вне виртуальных хостов, которые наследуются всеми виртуальными хостами. С Nginx вы должны явно включать общие конфиги в каждый блок сервера.
Дж. М. Беккер