Назад | Перейти на главную страницу

nginx: восходящий поток с несколькими директивами сервера?

Я пытаюсь упаковать 2 приложения, которые используют nginx в качестве прокси, и доставить каждому конфигурационный файл в /etc/nginx/conf.d/.

Делаем это в одном файле (combined.conf) прекрасно работает :

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

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

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

Однако при разделении на 2 файла происходит систематическая ошибка одного из перенаправлений:

Итак, мой вопрос: может ли http узел имеет 2 разных server Дети ?

Nginx документация ничего не говорит об этом.

У других людей, кажется, есть удалось хотя с такой архитектурой :(

Версия Nginx - 1.1.19-1ubuntu0.1.

Спасибо за любой совет!

После такого грохота и тестирования я нашел способ заставить его работать и иметь возможность отправлять по одному файлу конфигурации для каждого приложения.

Вот он, отправленный в одном общем файле и паре исходных файлов / файлов местоположения для каждого приложения:

  • /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;
    }
    

Блок http может иметь много дочерних серверов. Однако nginx выбирает один серверный блок для обработки запроса. Таким образом, запрос никогда не «видит» расположение backend2, потому что оно совпадает с первым серверным блоком.