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

Настройка двух разных серверов приложений в одном nginx?

У меня есть два разных сервера приложений, один - мое собственное приложение, а другой - CRM. Мое собственное приложение получит запрос и запросит у crm-сервера некоторые данные, а на конечном сервере - клиента. У меня есть один nginx, который обрабатывает crm, и я хочу, чтобы с моим приложением работал тот же nginx, и пусть это приложение обменивается данными между ними.

Я пробовал со следующей конфигурацией

upstream example.net{
server 192.168.200.144:8080; # virtual machine web1 site
server 192.168.200.143:8080; # virtual machine web2 site

}

upstream example-crm.net{
server 192.168.200.85:8080; # virtual machine web1 site
server 192.168.200.86:8080; # virtual machine web2 site

}

server {
listen       192.168.200.173; # public IP address of your server
server_name  example.net;
server_name     example-crm.net

location / {

proxy_pass           http://example.net;
proxy_pass           http://example-crm.net;


proxy_connect_timeout       900;
proxy_send_timeout          900;
proxy_read_timeout          900;
send_timeout                900;

proxy_redirect       off;
proxy_set_header     Host $http_host;
proxy_set_header     X-Real-IP $remote_addr;
proxy_set_header     X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

но это не работает.
чтобы было понятнее, я нарисовал диаграмму, которая объясняет сценарий

Пояснение к диаграмме:

клиент отправляет запрос 1 на виртуальный IP 192.168.200.173, nginx отправляет запрос 2 на сервер приложения 1, сервер приложения 1 отправляет запрос 3 на сервер nginx для сервера приложения 2, nginx отправляет запрос 4 на сервер приложения 2, а приложение 2 отправляет запрос 5 на nginx и nginx отправляет запрос 6 в приложение 1, а приложение 1 выполняет свою бизнес-логику и отправляет запрос 7 в nginx, а nginx обслуживает запрос 8 клиенту.

Любое предложение ?

Ты делаешь это неправильно. Как это должно быть:

server {
    listen       192.168.200.173; # public IP address of your server
    server_name     example.net

    location / {

        proxy_pass           http://example.net;


        proxy_connect_timeout       900;
        proxy_send_timeout          900;
        proxy_read_timeout          900;
        send_timeout                900;

        proxy_redirect       off;
        proxy_set_header     Host $http_host;
        proxy_set_header     X-Real-IP $remote_addr;
        proxy_set_header     X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {
    listen       192.168.200.173; # public IP address of your server
    server_name     example-crm.net

    location / {

        proxy_pass           http://example-crm.net;


        proxy_connect_timeout       900;
        proxy_send_timeout          900;
        proxy_read_timeout          900;
        send_timeout                900;

        proxy_redirect       off;
        proxy_set_header     Host $http_host;
        proxy_set_header     X-Real-IP $remote_addr;
        proxy_set_header     X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

Прочтите, как nginx обрабатывает запрос: http://nginx.org/en/docs/http/request_processing.html

Короче говоря, он найдет два сервера для этого IP-адреса, затем он проверит заголовок «Host» в HTTP-запросе и обработает запрос на сервере, у которого есть соответствующее имя_сервера.