场景:1台nginx去代理4台apache
需求:根据不同的请求uri 代理到不同的apache
nginx的配置文件为:
nginx代理--根据访问的目录来区分后端的web
我的需求: 当请求的目录是 /aaa/ 则把请求发送到机器a,当请求的目录为/bbb/则把请求发送到机器b,除了目录/aaa/与目录/bbb/外,其他的请求发送到机器b
配置文件内容为:
upstream aaa.com
{
server 192.168.111.6;
server 192.168.111.4;
server 192.168.111.5;
}
3 proxy_pass http://aaa.com/aaa/ 这里必须要加这个目录,不然就访问到根目录了。
4 实际上,上述配置文件中, localtion /bbb/ 部分是可以省略掉的,因为后边的 location / 已经包含了/bbb/,所以即使我们不去定义 localtion /bbb/ 也是会访问到 bbb.com 的。
nginx 代理多台机器 长连接(会话保持)解决问题
网站使用程序 discuzx3 访问都正常,只有用户登陆存在异常,具体的情况是这样的:
用户登陆后,会马上显示未登陆,然后刷新一下或者多下又变成了登陆中。
这个问题很显然是由于session导致,后台有多个web机器,当用户登陆后,会把登陆态session保存到当前web,但是再次发送请求时则会到另一台机器,所以原来的session信息找不到了。解决这个问题有两个思路:
可以让前端的调度器保持长连接,也就是说某个用户的请求在某一时间段内始终抓发到固定的一台机器上。
这两种方式,第二种更容易实现。
使用的是nginx的代理,其中nginx有一种算法支持长连接,具体配置是这样的:
原文地址:http://blog.51cto.com/13492528/2087790