我有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:所有信息都保存在共享内存区域的服务器端。