Nginx反向代理向多个后端服务器发送相同的请求

我有NGINX作为反向代理和两个Apache作为上游服务器。

每当我访问example.com(定向到NGINX),两个Apache服务器都获得GET请求。 这似乎很奇怪,因为NGINX默认是基于循环方法的作品

这是我的configuration:

upstream apache { server 172.18.0.164; server 172.18.8.18; } location / { proxy_pass http://apache; } 

loginApache 1机器: –

192.168.10.236 – – [05 / Oct / 2015:07:59:21 -0400]“GET / HTTP / 1.0”200

loginApache 2机器: –

172.18.8.97 – – [05 / Oct / 2015:11:59:27 +0000]“GET / wordpress / HTTP / 1.0”

直接从Nginxpipe理指南 :


启用会话持久性

NGINX Plus支持三种会话持久性方法。 这些方法是用sticky指令设置的。

粘性cookie方法。 通过这种方法,NGINX Plus为来自上游组的第一个响应添加一个会话cookie,并识别发送响应的服务器。 当客户端发出下一个请求时,它将包含cookie值,NGINX Plus将请求路由到同一个上游服务器:

 upstream backend { server backend1.example.com; server backend2.example.com; sticky cookie srv_id expires=1h domain=.example.com path=/; } 

在这个例子中, srv_id参数设置了将被设置或者检查的cookie的名字。 可选的expires参数设置浏览器保存cookie的时间。 可选的domain参数定义了cookie的设置域。 可选的path参数定义了cookie的设置path。 这是最简单的会话持久性方法。

粘滞的路线方法。 使用这种方法,NGINX Plus会在收到第一个请求时为客户端分配一个“路由”。 所有后续的请求将与服务器伪指令的路由参数进行比较,以识别请求将被代理的服务器。 路由信息取自cookie或URI。

 upstream backend { server backend1.example.com route=a; server backend2.example.com route=b; sticky route $route_cookie $route_uri; } 

Cookie学习方法。 通过这种方法,NGINX Plus首先通过检查请求和响应来查找会话标识符。 然后NGINX Plus会“学习”哪个上游服务器对应哪个会话标识符。 通常,这些标识符通过HTTP cookie传递。 如果一个请求包含一个已经被“学习”的会话标识符,NGINX Plus会将请求转发给相应的服务器:

 upstream backend { server backend1.example.com; server backend2.example.com; sticky learn create=$upstream_cookie_examplecookie lookup=$cookie_examplecookie zone=client_sessions:1m timeout=1h; } 

在该示例中,其中一个上游服务器通过在响应中设置cookie“EXAMPLECOOKIE”来创build会话。

强制性参数create指定一个variables,指出如何创build一个新的会话。 在我们的例子中,从上游服务器发送的cookie“EXAMPLECOOKIE”创build新的会话。

强制性参数lookup指定如何search现有会话。 在我们的示例中,现有会话在客户端发送的cookie“EXAMPLECOOKIE”中search。

强制性参数zone指定一个共享内存区域,其中保留有关粘性会话的所有信息。 在我们的例子中,该区域名为client_sessions ,大小为1兆字节。

这是一个更复杂的会话持久化方法,因为它不需要在客户端保留任何cookie:所有信息都保存在共享内存区域的服务器端。