nginx: birden çok sunucu yönergesiyle akış yukarı?


15

Proxy olarak nginx kullanan 2 uygulamaları paketlemeye ve her bir yapılandırma dosyasını teslim etmeye çalışıyorum /etc/nginx/conf.d/.

Bunu bir dosyada ( combined.conf) yapmak harika çalışıyor:

    upstream backend1 {
      http://localhost:8989;
    }

    upstream backend2 {
      http://localhost:8990;
    }

    server {
      location /backend1/ {
        proxy_pass  http://backend1;
      }
      location /backend2/ {
        proxy_pass  http://backend2;
      }

Ancak, 2 dosyaya bölündüğünüzde, yönlendirmelerden biri sistematik olarak başarısız olur:

  • backend1.conf:

    upstream backend1 {
      http://localhost:8989;
    }
    
    server {
      location /backend1/ {
        proxy_pass  http://backend1;
      }
    
  • backend2.conf:

    upstream backend2 {
      http://localhost:8990;
    }
    
    server {
      location /backend2/ {
        proxy_pass  http://backend2;
      }
    

Benim sorum şu: Bir httpdüğümün 2 farklı serverçocuğu olabilir mi?

Nginx belgeleri bu konuda hiçbir şey söylemiyor.

Diğer insanlar da bu tür mimariyi başardılar :(

Nginx sürümü 1.1.19-1ubuntu0.1'dir.

Herhangi bir tavsiye için teşekkürler!


Daha kesin olmak gerekirse, 2 dosya yaklaşımını kullandığımda 404 ile yanıt veren varsayılan sitedir.
oDDsKooL

Yanıtlar:


8

Bu kadar gürleyen ve test ettikten sonra, çalışmasını sağlamak ve uygulama başına bir yapılandırma dosyası gönderebilmek için bir yol buldum.

Burada, bir ortak dosyada ve uygulama başına bir çift yukarı akış / konum dosyasında gönderilir:

  • /etc/nginx/conf.d/common-proxies.conf:

    include /upstreams/*.conf;
    
    server {
    include /locations/*.conf
    }
    
  • /etc/nginx/locations/backend1.conf

    location /backend1/ {
      upstream http://backend1;
    }
    
  • /etc/nginx/locations/backend2.conf

    location /backend2/ {
      upstream http://backend2;
    }
    
  • /etc/nginx/upstreams/backend1.conf

    upstream backend1 {
      http://localhost:8989;
    }
    
  • /etc/nginx/upstreams/backend2.conf

    upstream backend2 {
      http://localhost:8990;
    }
    

1
Bu bir yazım hatası mı? akış yukarı " localhost: 8990 ;" yerine "sunucu localhost: 8990" olmalıdır . Buraya bakın: nginx.org/tr/docs/http/ngx_http_upstream_module.html
mbdev

Bağladığınız dokümanda, bir blok içindeki her komutun yarı sütunla bittiği anlaşılıyor. Örn upstream backend { server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; }. Ayrıca, bu ;:)
oDDsKooL

'Sunucu' anahtar kelimesinin adresten önce eksik olduğunu kastediyorum. Noktalı virgül kısmını dikkate almayın.
mbdev

1

Bir http bloğunda birçok sunucu alt öğesi olabilir. Ancak, nginx bir isteği işlemek için bir sunucu bloğu seçer. Bu nedenle, istek ilk sunucu bloğu ile eşleştiği için backend2 konumunu asla 'görmez'.


Muhtemelen locationbackend2 için amaçlanan emmeyi berbat ve kapmak benim direktifim mi?
oDDsKooL

Yoksa servernginx serveristeği iletmek için uygun aradığında her iki bloğu farklılaştırmanın bir yoluna ihtiyacım var mı?
oDDsKooL

Her iki konum bloğu da aynı sunucu bloğu içinde olmalıdır.
chrskly
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.