У меня есть два разных сервера приложений, один - мое собственное приложение, а другой - 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-запросе и обработает запрос на сервере, у которого есть соответствующее имя_сервера.