在一个 nginx 中配置两个不同的应用程序服务器?

在一个 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;
}
}

但它不起作用。
为了更清楚,我画了一张图来解释这种情况
在此处输入图片描述

图表说明:

客户在虚拟 IP 192.168.200.173 上发送请求 1,nginx 将请求 2 发送到应用程序 1 服务器,应用程序 1 服务器将请求 3 发送到 nginx 以供应用程序 2 服务器使用,nginx 将请求 4 发送到应用程序 2 服务器,应用程序 2 向 nginx 发送请求 5,nginx 将请求 6 发送到应用程序 1,应用程序 1 执行其业务逻辑并将请求 7 发送到 nginx,nginx 将请求 8 提供给客户。

有什么建议吗?

答案1

你做错了。应该怎么做:

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 地址找到两个服务器,然后它会检查 HTTP 请求中的“Host”标头,并在具有相应 server_name 的服务器中处理请求。

相关内容