Nginx. Vererbung von Serveranweisungen.

9

Gibt es eine Möglichkeit, die Konstruktion zu reduzieren wie:

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

zu

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

Alle anderen Ratschläge zur Beseitigung des API-Abschnitts sind willkommen.

Nikolay Fominyh
quelle
Bitte nehmen Sie sich einen Moment Zeit, um unsere FAQ zu lesen. Ihre Frage erscheint mir für diese Site nicht zum Thema.
HopelessN00b
@ HopelessN00b, ja, sieht aus wie es offtopic ist. Aber hier haben wir 3000 Fragen zu Nginx, was in diesem Fall seltsam ist. Ich bin sicher, dass diese Frage nicht für Stackoverflow ist.
Nikolay Fominyh

Antworten:

13

Mit einer includeAussage könnte man das ganz einfach machen .

/etc/nginx/conf/api_defaults.conf

location /api/ { 
  proxy_pass 127.0.0.1:5000;
}    

Dann in Ihrer Hauptkonfiguration 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;
  }         
}
Ben Lessani - Sonassi
quelle
Das habe ich auch gedacht, mit anderen Worten, Standortblöcke werden nicht an Serverblöcke vererbt. Dies ist anders als bei Apache, wo Sie Standorte außerhalb von virtualhosts definieren können, die von allen virtualhosts geerbt werden. Bei Nginx müssen Sie die allgemeinen Konfigurationen explizit in jeden Serverblock aufnehmen.
JM Becker