我们使用 nginx 进行负载平衡,并且需要 ip_hash 来保证我们的服务器正常工作。
当我们开始使用 cloudflare 时,我们的大多数请求都发往一台服务器,因为似乎所有服务器都仅通过 cloudflare 的 IP 来识别。我们希望更好地平衡它,如果 ip_hash 使用 cloudflare 放在请求上的标头 CF-Connecting-IP,那就太好了。
有人知道怎么做吗?
upstream backend {
ip_hash;
#proxy_next_upstream_timeout 30;
server localhost:8080 max_fails=2 fail_timeout=180;
server somethign:8080 ;
server something2:8080;
}
答案1
Cloudflare 有这些 IP 范围,你可以使用内置的 nginxreal_ip模块并正确设置标题 https://www.cloudflare.com/ips
set_real_ip_from 204.93.240.0/24;
real_ip_header CF-Connecting-IP;
https://support.cloudflare.com/hc/en-us/articles/200170706-CloudFlare 是否具有 Nginx 的 IP 模块-
答案2
作为本主题中建议的方法的替代hash
指令可用于从任何变量(在我们的例子中是$http_cf_connecting_ip
标题)构建哈希表。
upstream backend {
hash $http_cf_connecting_ip;
}