Bir sunucunun konumlarını birden fazla nginx yapılandırma dosyasında tanımlayabilir misiniz?


14

Aynı ana bilgisayarda çalışan birden çok yakut uygulamam var:

~/app1
~/app2
~/app3

Ve nginx proxy gibi uygulamalar gibi alt dizinleri kullanarak istiyorum:

   http://example.com/app1
   http://example.com/app2
   http://example.com/app3

Nginx, bu konumları birden fazla dosyada tanımlayabilmemi destekleyip desteklemediğini merak ediyorum, böylece tüm uygulamaları için tek bir yapılandırma dosyasına sahip olmak yerine her yapılandırmayı uygulama ile birlikte tutabilirim:

~/app1/nginx.conf
~/app2/nginx.conf
~/app3/nginx.conf

3 yapılandırma dosyalarının her birinde tek bir konum yönergesi ile sunucuyu tanımlamak benim naif teşebbüs şöyle conflicting server name "example.com" on [::]:80, ignoredbir yapılandırma ile yol açtı :

upstream app1 { server 127.0.0.1:4567; }
server {
  listen      [::]:80;
  listen      80;
  servername  example.com
  location    /app1 {
     proxy_pass  http://app1;
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection "upgrade";
     proxy_set_header Host $http_host;
     proxy_set_header X-Forwarded-Proto $scheme;
     proxy_set_header X-Forwarded-For $remote_addr;
     proxy_set_header X-Forwarded-Port $server_port;
     proxy_set_header X-Request-Start $msec;
  }
}

Yapılandırmaları bu şekilde düzenlemenin bir yolu var mı?

Yanıtlar:


9

Harici yapılandırmaları aşağıdakiler aracılığıyla ekleyebilirsiniz:

include /path/to/config1.conf;
include /path/to/config2.conf;
include /path/to/confdir/*.conf;

server {
    server_name example.com;
    listen      [::]:80;
    listen      80;
}

Ayrı yapılandırma içinde geçerli kod bloklarını kullanabilirsiniz:

upstream app1 {
    server 127.0.0.1:8080;
}

location /app1 {
    proxy_pass http://app1;
}

5
Bu gerçekten işe yarıyor mu? Giriş modülünün sunucu modülü bloğunun dışında olması gerekmez mi?
— Curley

5
Sunucu komutunun dışında konum yönergesine izin verilmiyor gibi görünüyor. En azından benim için, nginx raporları "location" directive is not allowed here.
— Alexander Amelkin

Evet ... Uygulama başına birden fazla dosya olmadan bunu düzgün bir şekilde yapmanın basit bir yolunu görmüyorum: bir sunucu bloğu içinde çalışacak, biri dışarıda çalışacak. Esneklik ve temiz bir joker kullanılabilir yapmak için sanırım: include /etc/nginx/above_server.d/*veinclude /etc/nginx/in_server.d/*
— jeteon

1
Bu cevap yanlış
— AmirHossein

11

Bu yapılandırmayı kullanabileceğinize inanıyorum:

server {
    server_name example.com;
    listen      [::]:80;
    listen      80;

    include /path/to/applications/*/nginx.conf;
}

ve ardından her uygulamanın dizininde yeniden yönlendirmeyi şu şekilde yapılandırın:

location    /app1 {
    proxy_pass  http://app1;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Request-Start $msec;
}

2
Dezavantajı, serverblok içinde birden fazla yukarı akış tanımlayamayacaksınız, ancak OP'nin kullanım örneğinin bu cevap tarafından iyi sunulduğunu düşünüyorum.
— Mart'ta jeteon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.