nginx作为负载平衡器:它可以返回到客户端的请求被发送到哪个应用服务器?

正常的解决方法是调整应用程序服务器自身,将自己的身份发回自定义的http头中。

我们处于特殊情况,应用程序服务器是一个硬编码的应用程序,我们似乎无法获得新的版本。 (在apache或iis上很容易解决,我们只需将这个头添加到web服务器。)

所以问题是,nginx本身是否具有向响应中添加头的function,以通知客户端哪个服务器为请求提供服务?

注意:这不是一个正常的“浏览器到Web服务器”的情况。 这是一个自定义的客户端代码(我们有源代码,可以修改)在整体的,编译的服务器(我们没有源代码也不能修改)上运行REST API。 客户端需要知道它打的是哪个服务器,但是不需要(或者不需要)一遍又一遍地去同一台服务器(例如,cookies不是答案….没有cookie)。 客户端只需要能够在响应中看到哪个服务器服务该请求的指示。

我们的nginxconfiguration如下。 我们正在运行当前的GA版本。 我们目前正在运行nginx作为一个负载平衡器,并在Windows上。

upstream appserver { least_conn; server 192.168.104.53:1124; // these are the IPs and ports of actual app servers server 192.168.104.51:1124; server 192.168.104.59:1124; } server { listen 80; // this is where nginx listens server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://appserver; } 

我想,你正在寻找$upstream_addrvariables。

它将包含192.168.104.xx:1124

 upstream appserver { least_conn; server 192.168.104.53:1124; server 192.168.104.51:1124; server 192.168.104.59:1124; } server { listen 80; server_name localhost; location / { proxy_pass http://appserver; add_header "X-Upstream-Addr" $upstream_addr; } } 

是的,你使用sticky指令。 例如:

sticky cookie srv_id expires=1h domain=.example.com path=/;

这将在客户端上设置一个cookie,并在接下来的一小时后将请求发送到正确的服务器。 这在上游指令。

资源