1

nginx 背后的多个 Web 应用程序。我在 nginx 后面运行了不同的 Web 应用程序。

  1. 主要网站应用程序 --> 这是提供指向不同应用程序的重定向链接的网站。
  2. 不同的应用程序 --> App-1/App-2/App-3
  3. Nginx --> 哪个路由到正确的应用程序。

这是我的下图,我正在使用我的设置来处理多个应用程序。

在此处输入图像描述

如何访问 App-1/App-2/App-3 应用程序

A. 浏览器发送访问主网站的请求,主网站为他们提供 304 重定向和 cookie 值(Device_type=xx 和 IP=45)以​​推迟。

* Device_Type=App-1 或 App-2 --> 要连接的设备。 * IP = 45 ,系统 IP 地址的最后一个八位字节。

因此,只需查看设备类型和 IP 最后八位字节值,就可以重定向到正确的应用程序。

B. 浏览器通过查看设备类型和 IP 最后八位字节值向带有 cookie 和 nginx 的 nginx 发送请求,一个将重定向到正确的应用程序。所有进一步的请求都会根据 nginx 的 cookie 值和规则转到正确的应用程序。

如果每个 APP 只能从一个浏览器访问应用程序(App-1/App-2/App-3),这绝对可以正常工作。

问题:- 不能从同一个浏览器访问两个应用程序。即,如果两个应用程序从同一个浏览器运行,即使不同的选项卡它们会共享 cookie。

现在,如果他们共享 cookie,那么 nginx 大多数时候会重定向到不正确的 APP。

我知道这不是最好的方法,但它是按照以前的方式完成的。

实现:-我想根据每个用户浏览器会话在 nginx 上进行动态路由。这样每次用户请求任何东西时,我都会路由它正确的 APP

我一直在研究 nginx 中的很多内容,但是 nginx 没有任何内容,它持有浏览器会话,以便所有后续请求都发送到同一个 APP 服务器。也在研究ceryx-dynamic-nginx。

  • 如果您认为 Cookie 不是好主意,那么我愿意接受改变它的想法。
4

1 回答 1

0

为了将基于 cookie 的请求定向到特定服务器,您需要做的就是制作如下映射:

map $cookie_IP $app_upstream {
   default main_app;
   45      app1;
   46      app2;
   66      app3;
}

并且您需要为每个创建应用程序流

upstream main_app {
   server 192.168.12.10;
}
upstream app1 {
    server 10.122.123.45;
}
upstream app2 {
    server 10.122.123.46;
}
upstream app3 {
    server 10.122.123.66;
}

在你的位置下你做

location / {
    proxy_pass http://$app_upstream$uri;
}

如果您为每个上游自定义了 url,那么,您需要做的是为每个上游创建服务器并使其根据主机名值进行定向。

于 2017-08-25T17:18:56.157 回答