Ich versuche, 2 Anwendungen, die Nginx als Proxy verwenden, zu packen und jeweils eine Konfigurationsdatei in zu liefern /etc/nginx/conf.d/
.
Dies in einer Datei ( combined.conf
) zu tun, funktioniert hervorragend:
upstream backend1 {
http://localhost:8989;
}
upstream backend2 {
http://localhost:8990;
}
server {
location /backend1/ {
proxy_pass http://backend1;
}
location /backend2/ {
proxy_pass http://backend2;
}
Beim Aufteilen in zwei Dateien schlägt jedoch eine der Umleitungen systematisch fehl:
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; }
Meine Frage ist also: Kann ein http
Knoten zwei verschiedene server
Kinder haben?
Die Nginx- Dokumentation sagt nichts darüber aus.
Anderen scheint diese Art von Architektur jedoch gelungen zu sein :(
Die Nginx-Version ist 1.1.19-1ubuntu0.1.
Danke für jeden Rat!
Antworten:
Nachdem ich so rumort und getestet habe, habe ich mir einen Weg ausgedacht, wie ich es zum Laufen bringen kann und in der Lage bin, eine Konfigurationsdatei pro Anwendung zu versenden.
Hier ist es, verteilt auf eine gemeinsame Datei und ein Paar Upstream- / Standortdateien pro Anwendung:
/etc/nginx/conf.d/common-proxies.conf
:/etc/nginx/locations/backend1.conf
/etc/nginx/locations/backend2.conf
/etc/nginx/upstreams/backend1.conf
/etc/nginx/upstreams/backend2.conf
quelle
upstream backend { server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; }
. Dies funktioniert auch mit der;
:)Ein http-Block kann viele untergeordnete Server haben. Nginx wählt jedoch einen Serverblock aus, um eine Anforderung zu verarbeiten. Die Anforderung "sieht" also nie den Speicherort von Backend2, da er mit dem ersten Serverblock übereinstimmt.
quelle
location
Direktive, die die für backend2 bestimmte Anfrage nervt und packt?server
Blöcke unterscheiden muss , wenn nginx nach dem passenden suchtserver
, um die Anfrage weiterzuleiten?