反向代理——根据IP路由到同一台机器
Reverse proxy - route to the same machine based on IP
假设我有一个负载均衡器(Nginx 或其他,没关系),我希望它根据 IP 路由到一台机器。 IP 在配置时未知。因此,例如,我在机器 m1 和 m2 前面有一个负载均衡器。来自 IP10 的请求被路由到 m1,来自 IP10 的所有后续请求也被路由到 m1。另一个请求来自 IP11,它被路由到 m2,所有来自 IP11 的后续请求也被路由到 m2。
这可能吗,如果可能怎么办?
根据您的描述,我了解到您对来自特定 IP 的第一个请求的路由位置没有特定要求,只要所有后续请求都遵循相同的路由即可。
如果是这种情况,您要执行的操作是称为 session stickiness 或 persistent session 的负载平衡方法。
在 nginx 中,您可以通过以下配置实现:
http {
upstream mybackend {
ip_hash;
server m1.ltd;
server m2.ltd;
}
server {
listen 80;
location / {
proxy_pass http://mybackend;
}
}
}
这里是link到具体的nginx docs。
假设我有一个负载均衡器(Nginx 或其他,没关系),我希望它根据 IP 路由到一台机器。 IP 在配置时未知。因此,例如,我在机器 m1 和 m2 前面有一个负载均衡器。来自 IP10 的请求被路由到 m1,来自 IP10 的所有后续请求也被路由到 m1。另一个请求来自 IP11,它被路由到 m2,所有来自 IP11 的后续请求也被路由到 m2。
这可能吗,如果可能怎么办?
根据您的描述,我了解到您对来自特定 IP 的第一个请求的路由位置没有特定要求,只要所有后续请求都遵循相同的路由即可。
如果是这种情况,您要执行的操作是称为 session stickiness 或 persistent session 的负载平衡方法。
在 nginx 中,您可以通过以下配置实现:
http {
upstream mybackend {
ip_hash;
server m1.ltd;
server m2.ltd;
}
server {
listen 80;
location / {
proxy_pass http://mybackend;
}
}
}
这里是link到具体的nginx docs。