代理后面的 Nginx ip_hash(Cloudflare)

代理后面的 Nginx ip_hash(Cloudflare)

我们使用 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;
}

相关内容