Próbuję spakować 2 aplikacje, które używają nginx jako proxy i dostarczyć do nich każdy plik konfiguracyjny /etc/nginx/conf.d/
.
Wykonanie tego w jednym pliku ( combined.conf
) działa świetnie:
upstream backend1 {
http://localhost:8989;
}
upstream backend2 {
http://localhost:8990;
}
server {
location /backend1/ {
proxy_pass http://backend1;
}
location /backend2/ {
proxy_pass http://backend2;
}
Jednak przy dzieleniu na 2 pliki jedno z przekierowań nie udaje się systematycznie:
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; }
Moje pytanie brzmi: czy http
węzeł może mieć 2 różne server
dzieci?
Dokumentacja Nginx nic o tym nie mówi.
Wydaje się, że innym ludziom udało się tego rodzaju architektura :(
Wersja Nginx to 1.1.19-1ubuntu0.1.
Dziękuję za wszelkie porady!
Odpowiedzi:
po tak dudnieniu i testowaniu wymyśliłem sposób, aby to zadziałało i móc wysłać jeden plik konfiguracyjny na aplikację.
Oto on, wysyłany w jednym wspólnym pliku i parze plików nadrzędnych / plików na aplikację:
/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
źródło
upstream backend { server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; }
. Działa to również z;
:)Blok http może mieć wiele potomków serwera. Jednak nginx wybiera jeden blok serwera do przetworzenia żądania. Zatem żądanie nigdy nie „widzi” położenia backend2, ponieważ pasuje do pierwszego bloku serwera.
źródło
location
dyrektywa jest do bani i pobiera żądanie przeznaczone dla backend2?server
bloków, gdy nginx szuka odpowiedniegoserver
do przekazania żądania?