Nginx. Warisan direktif server.

9

Apakah ada cara untuk mengurangi konstruksi seperti:

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

untuk

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

Saran lain untuk menyingkirkan bagian api dipersilakan.

Nikolay Fominyh
sumber
Silakan luangkan waktu sejenak untuk membaca FAQ kami. Pertanyaan Anda muncul di luar topik untuk situs ini bagi saya.
HopelessN00b
@ HopelessN00b, ya, sepertinya itu offtopic. Tapi di sini kita punya 3000 pertanyaan tentang nginx, yang aneh dalam hal ini. Saya yakin, bahwa pertanyaan ini bukan untuk stackoverflow.
Nikolay Fominyh

Jawaban:

13

Anda bisa melakukannya dengan mudah dengan sebuah includepernyataan.

/etc/nginx/conf/api_defaults.conf

location /api/ { 
  proxy_pass 127.0.0.1:5000;
}    

Kemudian di vhostkonfigurasi utama Anda .

/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
sumber
Itulah yang saya pikir juga, dengan kata lain blok lokasi tidak diwariskan ke blok server. Ini tidak seperti bagaimana Apache melakukannya, di mana Anda dapat memiliki lokasi yang ditentukan di luar virtualhosts, yang diwarisi oleh semua virtualhosts. Dengan Nginx Anda harus secara eksplisit memasukkan konfigurasi umum, di setiap blok server.
JM Becker