Я пытаюсь упаковать 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 файла происходит систематическая ошибка одного из перенаправлений:
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;
}
Итак, мой вопрос: может ли 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, потому что оно совпадает с первым серверным блоком.