我有两个不同的应用服务器,一个是我的自定义应用程序,另一个是 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 的服务器中处理请求。