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.